springboot 升级笔记(2.0.4.RELEASE升级到2.3.12.RELEASE)

springboot 升级笔记


我的项目使用了 spring cloud、spring boot、 spring cloud alibaba,之前 nacos 是单机模式,微服务注册没有出现异常。最近尝试把 nacos 改为集群模式部署以后,部分微服务无法注册到 nacos,报错:

server is DOWNnow, detailed error message: Optional[Distro protocol is not initialized]
#详细报错
com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance/list after all servers([XXX:8848]) tried: ErrCode:503, ErrMsg:server is DOWNnow, detailed error message: Optional[Distro protocol is not initialized]
at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:552)
at com.alibaba.nacos.client.naming.net.NamingProxy.reqApi(NamingProxy.java:491)

另一种报错

receive invalid redirect request from peer 172.20.0.1

按照网上的资料,基本是 2 个处理思路:

  • 检查端口开放,要开放 8848、9848 端口
  • nacos 配置文件里指定 ip 地址

都尝试过,但未解决。最终想到可能是版本不一致导致。查看 spring cloud 阿里巴巴版本对应表( https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E ),确实有差异。所以决定修改各个组件的版本

版本目标

原 springboot 版本:2.0.4.RELEASE

修改目标:

  • springboot 至 2.3.12.RELEASE
  • springcloud 至 Spring Cloud Hoxton.SR12
  • ailibabaspringcloud 至 2.2.9.RELEASE

修改项目 pom 文件

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<!-- 中间略过一部分 -->

<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.SR12</spring-cloud.version>
    <nacos-config-spring-cloud.version>2.2.9.RELEASE</nacos-config-spring-cloud.version>
    <nacos-discovery-spring-cloud.version>2.2.9.RELEASE</nacos-discovery-spring-cloud.version>
</properties>

mongodb 配置

springboot 版本改变后,mongodb 对应的 jar 包版本改变,导致原配置报错

原配置手动写了 mongoDbFactory、gridFsTemplate、mongoOptions、mongoClient 等 bean。新版本只要写 getGridFSBucket 即可:

public class MongoConfig {

	@Value("${spring.data.mongodb.authentication-database}")
	String database;

	@Bean
	public GridFSBucket getGridFSBucket(MongoClient mongoClient){
		MongoDatabase mongoDatabase = mongoClient.getDatabase(database);
		return GridFSBuckets.create(mongoDatabase);
	}

}

spring 配置文件修改

  • spring.datasource.driverClassName
    原本是com.mysql.jdbc.Driver,改为:
com.mysql.cj.jdbc.Driver
  • 增加配置 spring.main.allow-bean-definition-overriding
spring.main.allow-bean-definition-overriding=true

druid 版本

涉及 datetime 等类型的 sql 报错,mybatisplus 报错:

Cause: java.sql.SQLFeatureNotSupportedException: null; nested exception is java.sql.SQLFeatureNotSupportedException

原因:druid 版本过低,修改为:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.21</version>
</dependency>

validation 修改

更新版本后,javax.validation 包丢失。增加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
    <groupId>jakarta.validation</groupId>
    <artifactId>jakarta.validation-api</artifactId>
</dependency>

项目启动时循环依赖报错

这里耗费了大量时间修改

短期处理:在循环依赖报错的引用上增加@Lazy 注释

长期处理:设计时尽量避免循环依赖

成果

nacos 微服务注册成功,并且项目启动速度快了 20%~30%左右。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值