项目实践
新建父项目
- 新建maven工程
- 选择模板 org.apache.maven.archetypes:maven-archetypes-site
- 选择项目字符编码setting->editor->file Encodings ->将所有字符编码全部换成 utf-8
- 支持注解setting->Build,Execution,Deployment->Compiler->Annotation Processors 内的 Enable annotation processing 打上勾表示能够使用注解。
- 更改编译版本setting->Build,Execution,Deployment->Compiler->Java Compiler 下 Pe-module butecode version 框内的编译版本换成 8
- 删除src文件夹
父工程POM
maven中的 dependencyManagement 与 dependencies
dependencyManagement 父类管理
Maven 使用dependencyManagement元素提供依赖版本号管理的方式 通常会在一个组织或者项目的最顶级父POM中看到dependencyManagement
使用dependencyManagement可以使所有子项目中引用一个依赖而不用显示列出版本号。Maven会沿父子层级向上走,直到找到dependencyManagement元素的项目 ,然后它就会使用版本号
如果某一个子项目需要另外一个版本,加上version即可。如果子项目中声明了版本号,那么使用子项目中的jar包。
dependencyManagement只是声明依赖,并不实现引入,一次子项目需要显式的声明需要用的依赖。
支付模块构建
1. cloud-provider-payment8001微服务提供者支持Moudle模块
- 建module
- 新建maven工程,不使用任何模板,改jdk为1.8。
- 写入项目name即可。
- 改POM
- 主POM内增加 moudle
- 子项目引入依赖
- 写YML
- 主启动
- 业务类
2. 热部署Devtools
- 引入坐标依赖
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
- 添加插件到父类总工程中
<build>
<finalName>工程名字</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
- 开启自动编译权限
setting->Build,Execution,Deployment->Compiler 内复选框全部打勾
4. 开启热注册
- 进入子模块 ctrl shift alt /
- 选择 Registry compiler.automake.allow.when.app.running compiler.automake.allow.when.app.running 这两个勾选中
- 重启idea
3. cloud-consumer-order80微服务消费者订单Module模块
1. 建module
- 新建maven工程,不使用任何模板,改jdk为1.8。
- 写入项目name即可。 2. 改POM
- 主POM内增加 moudle
- 子项目引入依赖 3. 写YML 4. 主启动 5. 业务类
- 将第一个子模块支付模块的实体类包复制过来
- 新建Controller类 6. 使用 RestTemplate 进行两个模块之间的调用,由消费者订单模块调用支付模块。
- 新建配置类,注册 RestTemplate bean
@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 写Controller方法
public class OrderController {
public static final String PAYMENT_URL = "http://localhost:8001";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create")
public CommonResult<Payment> create(Payment payment){
return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
}
@GetMapping("/consumer/payment/get/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id")Long id){
return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
}
}
3. 启动
- 先启动8001
- 再启动 80
- idea右下角弹出窗口,选择show,共同管理两个端口号
- 使用http://localhost/consumer/payment/get/31访问,80为默认端口号可省略不写
工程重建:
-
问题项目中有重复部分:两个工程中有完全相同的实体类
-
新建公共项目 cloud-api-commons 将公共有的实体类包括工具类等放到里面,所有模块都可以使用
- 导入依赖 lombok devtools 以及 hutool 工具包
- 将实体类包导入到项目中
-
maven clean install
- 点击上面的闪电 跳过测试
- 进入 maven 找到新建模块,进入 Lifecycle 先clean再 install重新安装
- 注意观察公共模块 pom 文件中必须含有独立的 groupid 和 artifactid