美文网首页
SpringBoot 1.5 升级 2.0 问题整理

SpringBoot 1.5 升级 2.0 问题整理

作者: HaPpy路 | 来源:发表于2019-04-12 16:35 被阅读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 问题整理

          本文链接:https://www.haomeiwen.com/subject/nudqwqtx.html