拆分背景:
- 项目采用springboot 1.5.12.REALEASE版本的单体架构,技术比较老,需要进行升级。
- 各个模块功能比较独立,目前是揉和在一起,要进行服务拆分,需要做到可插可拔。
- 每次修改bug和新需求开发,需要给每个客户进行一次部署,浪费人力和运营成本。
技术选型:
- SpringBoot升级为2.3.11.REALEASE
- SpringCloud版本:Hoxton.SR8
- OpenFeign:提供远程调用接口
- gateway:网关,授权
- ribbon:客户端负载均衡
- seta:分布式事务
- rocketmq:普通消息订阅推送
- nacos: 注册中心,配置中心
- ....
项目依赖整合
在父控pom.xml升级项目依赖版本 版本依赖查看
application.yml:
logging:
level: debug
path: logs-prod/
file: xx.log
改为:
logging:
level: debug
file:
path: logs/
name: xx.log
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
port: 8602
context-path: /xx
改为
# Tomcat
server:
tomcat:
uri-encoding: UTF-8
threads:
min-spare: 30
max: 1000
port: 8380
servlet:
context-path: /xx
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<spring-boot.version>2.3.11.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
<skipTests>true</skipTests>
</properties>
<!--配置之后相关的依赖不用指定版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>-->
<!--改为maven打包 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
升级版本遇到问题
验证框架出现问题
导入validation-api和hibernate-validator包即可
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.6.Final</version>
<scope>compile</scope>
</dependency>
log4j出现问题
导入log4j包即可
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
SpringBoot启动类的注解不能加载
去掉SpringBootServletInitializer,查看SpringBootServletInitializer的注释得知,只有在构建war文件和部署时需要,运行嵌入式容器不需要。
SecurityAutoConfiguration: 去掉
WebMvcConfigurerAdapter: 替换为实现WebMvcConfigurer
再次启动抛出异常
Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvider at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.getDeclaredMethods(Class.java:1975) at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ... 21 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.jdbc.metadata.DataSourcePoolMetadataProvider at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 25 common frames omitted
解决方案:升级druid.version版本即可
升级完版本之后要注意:因为之前是1.5.19的版本,升级之后还有残留的引用包,可以在dependency中查看版本,然后在maven仓库中删除所有之前残留的版本包,然后再重新启动idea中进行clean,刷新项目即可。