原创在CSDN找
目录
1.mongoDB升级后因许多类及方法都改变了,特此说明下:
7.注意引用的jar或配置中存在二级及以上的路径时不要采用驼峰名:
9.报错:Caused by: java.lang.ClassNotFoundException: javax.jms.JMSContext
一、升级步骤
将SpringBoot版本升级为目前最新的稳定版本2.2.6
SpringCloud版本升级为对应匹配Hoxton.SR4,官网说要5以上但其他项目均用的4也便保持一致,8的版本可能有问题,未使用
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
二、常见问题及解决方案
参考文档地址:springboot 1.4.0升级2.2.6版本后遇到的问题总结 - 表演给自己看的认真 - 博客园 (cnblogs.com)
1.mongoDB升级后因许多类及方法都改变了,特此说明下:
1)mongoTemplate的更新方法回参由WriteResult改变为UpdateResult, UpdateResult的wasAcknowledged方法可以判断返回是否正确.
2)new Sort(Sort.Direction.DESC,"sortNo") mongo的排序sort给为了私有,需要修改为Sort.by(Sort.Direction.DESC,"sortNo") 解决
3)BasicDBObject在作为参数进行查询时,需要换成org.bson.Document来代替
4)启动时会一直访问Mongo端口,确认配置中无用到mongo的地方,在启动类排除mongo的自动装配.
2.tomcat的修改:
1)项目报错web server未启动,添加<spring-boot-starter-web>依赖解决
2)项目之前以java代码形式对tomcat的post请求大小做限制,升级后找不到对应的类,改为在yml文件设置tomcat的大小
#-1表示不受限制,此处说明下若之前版本设置为0也可以表示无限制,升级后只有-1表示无限制(百度搜)
server.tomcat.max-http-post-size: -1
3)项目升级后启动后存在一直访问rabbitmq端口的报错问题,因之前使用的cloud版本HOXTON.SR8,将cloud的修改为HOXTON.SR4便不会访问
3.ribbon由原先的
<artifactId>spring-cloud-starter-ribbon</artifactId>
改为<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
4.eureka由原先的
<artifactId>spring-cloud-starter-eureka</artifactId>
改为 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
5.hystrix由原先的
<artifactId>spring-cloud-starter-hystrix</artifactId>
改为<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
6.redis的修改
1)redis由原先的<artifactId>spring-boot-starter-redis</artifactId>
改为:<artifactId>spring-boot-starter-data-redis</artifactId>
2)启动报java.lang.NoClassDefFoundError: redis/clients/jedis/JedisPoolConfig,
解决:加此可以减少redis的报错,加了没用到也没关系嘛
<!-- 解决版本冲突而加的 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>3)启动时报错:
这个错你们不一定碰到,当时翻资料很久也没有找到,后来对比其他升级完成的项目配置文件才解决,也没太明白哪里的问题.
主要有以下几个报错:
1.[LSV/01][ERROR][2022-02-16T09:45:20.952]Application run failed java.lang.IllegalStateException: Failed to execute CommandLineRunner 2.Caused by: org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception isredis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 3.Caused by: redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
自己分析主要是权限校验问题
解决:
redis: host: redis地址 port: 端口 timeout: 超时时间 database: 连接库 userHost: 跟上面一致 userPort: 跟上面一致 userDatabase: 跟上面一致 password: redis的连接密码 userPassword: 跟上面一致 我的解决主要是添加了userpassword配置.
7.注意引用的jar或配置中存在二级及以上的路径时不要采用驼峰名:
原因:spring.rabbitmq-AC1231 会对AC报错
解决:修改为spring.rabbitmq-ac1231,spring boot 2.x 中对配置文件中名称的命名规范进行了强制约束,需要使用kebab格式,不能使用java中的驼峰式写法了,分隔符使用 ’-‘ 来分隔.
8.mysql注意事项:
1)升级后要加上时区,如:mysql://xx:xx:xx:xx:3306/库名?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
2)数据库驱动要加cj,如:com.mysql.cj.jdbc.Driver
3)项目存在多数据源时记得配置文件的url修改为jdbc-url
9.报错:Caused by: java.lang.ClassNotFoundException: javax.jms.JMSContext
解决:查看有没有引入activemq-client依赖或其他依赖与spring-jms依赖冲突,在冲突依赖中添加
<exclusions> <exclusion> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-jms_1.1_spec</artifactId> </exclusion> </exclusions>
总结:每个人的报错可能不一样,细心点再对比下其他升级后的项目基本都可以找到原因,我这里的解决并不完全,有新的报错解决方案欢迎讨论,谢谢,希望大家在这条路一直坚持下去!