步骤
新建父项目
首先,创建一个SpringBoot项目,该项目只用来做聚合,不用打包成一个Jar包,因此在pom.xml中添加:
<packaging>pom</packaging>
建立两个子项目
然后,在该父项目下新建子Module,Order和Stock,建立Maven项目即可,因为子项目可以继承父项目的pom配置。因此不必建立Springboot项目了。
在Order和Stock的pom.xml中添加依赖, 为了便于测试两个子模块间的互相调用:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
然后,在两个子Module下分别新建两个Controller:
在order下新建OrderController:
package com.lang.order.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/order")public class OrderController {@RequestMapping("/add")public String add() {System.out.println("下单成功");return "Hello World";}}
给Order配置端口 , 在resources下新建application.yml并配置:
server:port: 8010
同样的,在stock这个Module下做类似的操作:
新建Controller:
package com.lang.stock.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/stock")public class StockController {@RequestMapping("/reduce")public String reduce() {System.out.println("减少库存");return "扣减库存";}}
配置端口:
server:port: 8011
新建启动类
在order下新建OrderApplication:
package com.lang.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;@SpringBootApplicationpublic class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {RestTemplate restTemplate = builder.build();return restTemplate;}}
这里注册了RestTemplate这个Bean,以便于做远程调用的使用。
修改OrderController, 去调用Stock里的接口:
@RequestMapping("/add")public String add() {System.out.println("下单成功");String msg = restTemplate.getForObject("http://localhost:8011/stock/reduce", String.class);return "Hello World" + msg;}
然后,在stock下新建StockApplication:
package com.lang.stock;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class StockApplication {public static void main(String[] args) {SpringApplication.run(StockApplication.class, args);}}
启动两个项目并测试
- 启动两个项目
- 访问
http://localhost:8010/order/add

可以看到,order模块成功调用了stock模块里的接口。
以上架构的问题
如果采用如上的分布式架构,那么在项目中就需要维护多个不同子模块的调用地址,非常麻烦。
...String msg = restTemplate.getForObject("http://localhost:8011/stock/reduce", String.class);...
要想解决这个问题,就可以使用注册中心。那么就可以直接使用SpringCloudAlibaba的架构
