目录
环境要求
1. jdk 1.8以上
2. maven 3.6以上
新建工程
new project
这里面选择spring initializr和maven都是一样的,选择前者会快速创建springboot项目,帮你配好application文件,还可以选择需要的启动器,启动类也会建好,如果创建maven的话就需要手动去建上述东西
next 项目初始化
一般父maven项目都是用来管理子maven项目的,或者子maven项目继承父maven项目的依赖,所以父maven项目只需要pom文件就够了,选择maven pom就不会创建svc等等的一些文件,其实packaging打包方式,父maven不会用来打包的,应该选择pom会在代码里面改
next 依赖启动项
版本后面在代码里面改,直接next和finish
创建完成
可以看到没有其他文件
父pom文件
配置打包方式为pom,当我们运行mvn package的时候就不会打包成jar包
依赖
创建服务
创建服务的时候建议选择maven,你选择spring initializr的话就会自动选择上述配置,因为我们选择服务是在父pom文件下的,可以继承fupom文件的依赖,所以里面不需要写这些配置,选择maven的话就可以选择要继承哪个maven项目
创建订单服务
创建完成,直接配置了父maven项目
同样的方式创建库存服务,创建完成
添加依赖
我们需要创建controller方便调用,所以需要使用到spring MVC,所以呢是需要添加web依赖的,同样也要添加到库存服务中去
创建controller
订单controller
@RestController
@RequestMapping("/order")
public class OrderController {
@PostMapping("/add")
public String add(){
System.out.println("下单成功");
return "hello world";
}
}
库存controller
@RestController
@RequestMapping("/stock")
public class StockController {
@PostMapping("/reduce")
public String reduce(){
System.out.println("库存扣减");
return "库存扣减";
}
}
远程调用
一般是通过http进行调用,但是现在用springboot,里面就有restTemplate,用这个的话还需要进行配置,我们这里就配置在启动类里面,因为启动类也是配置类
配置启动类
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
@SpringBootApplication
public class StockApplication {
public static void main(String[] args) {
SpringApplication.run(StockApplication.class, args);
}
}
restTemplate配置
通常写在配置类里面,这里面图方便
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
return builder.build();
}
}
注入以及请求
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@PostMapping("/add")
public String add(){
System.out.println("下单成功");
/**
* 1. 请求地址
* 2. 响应的数据类型
* 3. 入参
*/
String url = "http://localhost:8011/stock/reduce";
String response = restTemplate.getForObject(url, String.class);
return "hello world" + response;
}
}
端口号配置
订单服务端口号
server:
port: 8010
库存服务端口号
server:
port: 8011
测试
同时启动两个启动类,演示的时候,拿浏览器测试的,浏览器只支持get请求,所以我把之前代码改成了get请求的了
远程调用成功
问题
如果服务很多的话,我们需要一个服务一个服务去维护,通过注册中心可以很方便的管理起来,而且通过上述代码我们可以看到如果远程机器的地址或者端口改变,我们也需要不停的去修改代码,维护起来很不方便,通过地址我们很难判断这个地址是属于哪个服务的
这么写也可以让子pom文件继承父pom文件的依赖,而且统一写到dependencyManagement里面,方便管理