spring有漏洞领导要升级(虽然我们还是用的jdk8),纱布了,升级吧,反正早晚也得升。
最新springframework 应该是5.3.18,去springboot官方查查对应的boot版本,是2.6.6
因为用的gradle的plugin,省了很多版本配置了
哦,版本是2.1.6.RELEASE ->2.6.6
第一坑 gradle不支持高版本的spring,下载gradle7.2
第二坑 idea不支持高版本gradle,下载idea2021.3.3(30天后面的事自行处理)
第三坑 高版本gradle,应该是7.x不支持compile了,必须给引用改成implementation
第四坑 @Valid引不进来了,发现hibernate的引用没有了,手动添加
implementation(‘org.springframework.boot:spring-boot-starter-validation’)
第五坑 cloud的组件版本和boot的版本不一致,这里我用了ribbon和openfeign,使用大概方法和各种尝试找到版本
implementation(‘org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.10.RELEASE’)
implementation(‘org.springframework.cloud:spring-cloud-starter-openfeign:3.1.1’)
第六坑 我guava没了,手动引一下吧
implementation(‘com.google.guava:guava:30.1.1-jre’)
第七坑 feign的一些api变了,不过都还好比较容易解决
request.requestBody().asBytes() 简化成了request.body()
feignException构造方法增加了status的参数等
至此,完成了七宗罪,基本上可以解决编译问题了,后面就是先起本地,再打包上测试环境了,开始。
- 本地起的时候报了很多的循环依赖,确实是有循环依赖问题,解决方法一个是加Lazy,一个是加配置spring.main. allow-circular-references:true,个人比较倾向于加lazy吧,毕竟熟一点。
- Quartz报找不到数据源,查了一下高版本的jobStore.class需要换一下:org.quartz.impl.jdbcjobstore.JobStoreTX -> org.springframework.scheduling.quartz.LocalDataSourceJobStore
- 报错Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException。网上说的加一个spring.mvc.pathmatch.matching-strategy: ANT_PATH_MATCHER,确实好使但是还没明白什么意思,后面还得研究下
- Swagger虽然升级了但是访问不通,这个还挺棘手因为网上也没查到什么建议:我看依赖和启动项,swagger包确实是进去了的,盲猜是因为访问路径改了,可以网上找了几个路径还真就访问不了。没办法看看源码吧,毕竟swagger的之前看过不是很困难。找到了springfox.documentation.swagger-ui.base-url配置项可以配置访问的context路径,然后最后路径是swagger-ui。好吧,配置一下springfox.documentation.swagger-ui.base-url=swagger,然后访问路径就成了swagger/swagger-ui。我们用这个当的docker pod的探针,所以比较关心。
- FeignClient的写法变了。我们有动态的调用不同IP的业务,类似于中心服务调用各个地区分区的节点这样。秉承着能用就行的方针,就将feignClient的url设置为’http://’,然后通过path参数设置的IP和端口。现在这么设置不行了,比如原本调用http://1.1.1.1:8080,现在变成了http://null//1.1.1.1:8080。最后查了下应该这么写,参数里加一个URI参数,参数里放ip端口就可以了。
- 貌似还有其他的问题,忘了。