SpringBoot 1.5 升级 2.0 问题整理

由于业务需要,决定将项目中Spring boot版本从1.5升级到2.0。期间遇到一些集成问题,我将一一列举:

1. 项目构建失败


由于spring boot升级,对应的spring cloud版本也从Dalston.SR4升级到了Finchley.RELEASE,保存配置,构建失败错误信息如下:

Could not find method dependencyManagement() for arguments [build_f1mchnmdf23hoatv2p2nvuqwn$_run_closure3@4b87f40] on root project 'authorize' of type org.gradle.api.Project.

解决方案为:在构建脚本中添加插件:

applyplugin:'io.spring.dependency-management'

2. Redis集成问题


2.1    依赖包问题

Spring boot 1.5和2.0依赖的Redis starter 包不一致,需要替换:

1.5:    'org.springframework.boot:spring-boot-starter-redis'

2.0:    'org.springframework.boot:spring-boot-starter-data-redis'

2.2    CacheManager问题

Spring boot删除了原来使用RedisTemplate构建CacheManager的实现,添加了新的使用RedisConnectionFactory构建的方式:

CacheManager的实现

2.3    配置参数问题:

Spring boot 1.5 和 2.0版本,Redis的配置参数也发生了变化,对比图如下:


升级前后配置对比

说明:Jedis和Lettuce的比较:

    Jedis:直连模式,在多个线程间共享一个 Jedis 实例时,是线程不安全的,如果想要在多线程环境下使用 Jedis,需要使用连接池,每个线程都去拿自己的 Jedis 实例,当连接数量增多时,物理连接成本较高。

    Lettuce:连接是基于Netty的,连接实例可以在多个线程间共享,所以,一个多线程的应用可以使用同一个连接实例,而不用担心并发线程的数量。当然这个也是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。通过异步的方式可以让我们更好的利用系统资源,而不用浪费线程等待网络或磁盘I/O。

3. 获取配置问题


升级后,注解@ConfigurationProperties的prefix属性不在支持驼峰命名,需要修改为蛇形命名(配置文件中写法不限,oss-info和ossInfo都有效):

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'ossConfig': Could not bind properties to 'OssConfig' : prefix=ossInfo, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.source.InvalidConfigurationPropertyNameException: Configuration property name 'ossInfo' is not valid


正确示例
错误示例




其他坑持续更新……

你可能感兴趣的:(SpringBoot 1.5 升级 2.0 问题整理)