分布式项目搭建

简介: 分布式项目搭建

 使用idea搭建一个基于springboot的分布式项目。

总体项目目录结构:

image.gif编辑

父maven项目:添加公共的依赖,pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <modules>
        <module>order</module>
        <module>stock</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.11.RELEASE</version>
        <relativePath></relativePath>
    </parent>
    <groupId>com.springcloud.learning</groupId>
    <artifactId>springcloudalibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloudalibaba</name>
    <description>Spring Cloud Alibaba</description>
    <packaging>pom</packaging>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

image.gif

stock : 库存模块

image.gif编辑

pom : 依赖于父模块,添加自己所需的web模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloudalibaba</artifactId>
        <groupId>com.springcloud.learning</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>stock</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

image.gif

StockController

package com.springcloud.learning.stock.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/stock")
public class StockController {
    @RequestMapping("reduct")
    public String reduct(){
        System.out.println("扣减库存");
        return "扣减库存";
    }
}

image.gif

StockApplication

package com.springcloud.learning.stock;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StockApplication {
    public static void main(String[] args) {
        SpringApplication.run(StockApplication.class,args);
    }
}

image.gif

application.yml   :  设置端口

server:
  port: 8011

image.gif

order:订单模块

image.gif编辑

pom : 依赖于父模块,添加自己所需的web模块。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloudalibaba</artifactId>
        <groupId>com.springcloud.learning</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>order</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

image.gif

OrderController

package com.springcloud.learning.order.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private RestTemplate restemplate;
    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功!");
        String msg = restemplate.getForObject("http://localhost:8011/stock/reduct", String.class);
        return "Hello World";
    }
}

image.gif

OrderApplication

package  com.springcloud.learning.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        RestTemplate restTemplate = builder.build();
        return restTemplate;
    }
}

image.gif

application.yml

server:
  port: 8010

image.gif

idea 开启多服务启动控制面板:

image.gif编辑

选择 springboot

image.gif编辑

如下图,就能控制多个服务的启动与停止:

image.gif编辑

备注: 项目中的maven依赖在打开idea时,总是会飘红,观察到本地maven配置中的settings.xml中有两个mirror地址。默认会使用第一个,但是第一个地址是公司内网地址,在家里不能访问。此时注释掉第一个地址,然后刷新maven依赖,使用如下功能重启idea。

image.gif编辑

maven项目给了我们便利的同时,使我们从海量的jar配置中解放出来,但是各种各样的依赖下载问题也总是让我们感觉到头疼。


目录
相关文章
|
SQL JavaScript 前端开发
springboot-plus、简介、开源单体系统,系统拆分和微服务 下
springboot-plus、简介、开源单体系统,系统拆分和微服务 下
1457 0
springboot-plus、简介、开源单体系统,系统拆分和微服务  下
|
5月前
|
Kubernetes jenkins 持续交付
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
|
前端开发 Java 调度
SpringCloud微服务实战——搭建企业级开发框架(四十二):集成分布式任务调度平台XXL-JOB,实现定时任务功能
定时任务几乎是每个业务系统必不可少的功能,计算到期时间、过期时间等,定时触发某项任务操作。在使用单体应用时,基本使用Spring提供的注解即可实现定时任务,而在使用微服务集群时,这种方式就要考虑添加分布式锁来防止多个微服务同时运行定时任务而导致同一个任务重复执行。
1018 55
SpringCloud微服务实战——搭建企业级开发框架(四十二):集成分布式任务调度平台XXL-JOB,实现定时任务功能
|
监控 前端开发 Java
手把手教你搭建SpringCloud项目(十七)集成Sleuth分布式链路跟踪
手把手教你搭建SpringCloud项目(十七)集成Sleuth分布式链路跟踪
364 0
|
SQL 消息中间件 JSON
微服务开发系列——第一篇:项目搭建(保姆级教程)
本节实现目标 搭建ac-mall2-cloud微服务基础骨架。 搭建微服务子项目:mall-pom、mall-common、mall-member、mall-product。 MyBatis-Plus配置:雪花ID、创建时间/修改时间 自动填充。 单个微服务子项目Swagger配置及访问。 返回JSON数据日期格式化。 Swagger优化:mall-common支持多个微服务Swagger配置、Swagger传参(语言参数、token、测试账号)
|
缓存 开发框架 NoSQL
SpringCloud微服务实战——搭建企业级开发框架(二十):集成Reids缓存
这章我们来介绍在系统中引入redisson-spring-boot-starter依赖来实现redis缓存管理 1、在GitEgg-Platform中新建gitegg-platform-redis用于管理工程中用到的Redis公共及通用方法。
483 57
SpringCloud微服务实战——搭建企业级开发框架(二十):集成Reids缓存
|
消息中间件 缓存 NoSQL
SpringCloud微服务实战——搭建企业级开发框架(三十七):微服务日志系统设计与实现【下】
针对业务开发人员通常面对的业务需求,我们将日志分为操作(请求)日志和系统运行日志,操作(请求)日志可以让管理员或者运营人员方便简单的在系统界面中查询追踪用户具体做了哪些操作,便于分析统计用户行为;系统运行日志又分为不同的级别(Log4j2): OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL,这些日志级别由开发人员在代码编写时确定,并编写在代码中,系统运行时记录,方便系统开发人员分析定位解决问题,查找系统性能瓶颈。
664 56
SpringCloud微服务实战——搭建企业级开发框架(三十七):微服务日志系统设计与实现【下】
|
消息中间件 安全 NoSQL
SpringCloud微服务实战——搭建企业级开发框架(三十七):微服务日志系统设计与实现【上】
针对业务开发人员通常面对的业务需求,我们将日志分为操作(请求)日志和系统运行日志,操作(请求)日志可以让管理员或者运营人员方便简单的在系统界面中查询追踪用户具体做了哪些操作,便于分析统计用户行为;系统运行日志又分为不同的级别(Log4j2): OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL,这些日志级别由开发人员在代码编写时确定,并编写在代码中,系统运行时记录,方便系统开发人员分析定位解决问题,查找系统性能瓶颈。
843 57
SpringCloud微服务实战——搭建企业级开发框架(三十七):微服务日志系统设计与实现【上】
|
Oracle 前端开发 Java
springboot-plus、简介、开源单体系统,系统拆分和微服务 上
springboot-plus、简介、开源单体系统,系统拆分和微服务 上
189 0
springboot-plus、简介、开源单体系统,系统拆分和微服务  上
|
安全 Java 数据库连接
【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙
【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙
722 0
【Archaius技术专题】「Netflix原生态」动态化配置服务之微服务配置组件变色龙