记录springboot从1.5.10升级到2.0.0过程中遇到的问题(上)

写在开头

随着springboot2.0.0的正式版本的已经发布,准备把公司的基于springboot的框架从1.5.10版本升级到2.0.0的第一个正式版本,在过程中遇到了很多问题,有的是自己的问题, 有的是springboot、springcloud 或者其他组件的问题。下面就记录一下在这个过程中遇到的问题,以及相关的解决方案,方便以后进行回顾

现状

现在大部分都是依附于springboot的starter作为组件形式进行开发,starter的模块很多,下面按模块记录到底改动了什么东西, 以及为什么要进行修改。

参考资料

大部分的参考资料都是springboot的官方wiki的文档
Springboot Migration文档地址

项目结构升级

  1. 之前的项目的版本管理和升级是通过maven的 rg.codehaus.mojo:versions-maven-plugin 来进行升级的, 每次都需要执行脚本来替换所有的pom里面的version,后面发现maven 3.5+ 之后可以通过在父项目定义revision变量字段,然后利用flatten-maven-plugin 的插件来完成一处定义,简化了升级版本的步骤,和影响范围。

配置文件的定义的改动

  1. 之前配置文件的一些前缀使用的驼峰的写法,现在在代码中springboot2要求一定要使用 - 来进行单词的分隔, 所以在代码层面统一做了一次改变。 不过有一点好的就是,之前配置中心统一使用的也是驼峰的写法,这个地方springboot2自动进行了转换,所以配置文件可以保持不动。
  2. 读取配置文件转换成对象, 通过新增的Binder对象来进行转换,操作也方便了很多。但是读取写死的配置文件和读取占位符的配置文件方法有所不同
    对于写死的配置文件可以用
new Binder(ConfigurationPropertySources.from(environment.getPropertySources()))
          .bind(targetName, Bindable.of(clazz))
          .orElseThrow(
              () -> new FatalBeanException("Could not bind DataSourceSettings properties"));

上面的方法没办法加载placeholder表达式的配置文件,所以可以通过

Binder.get(environment).bind(targetName, Bindable.of(clazz)).orElseThrow(
          () -> new FatalBeanException("Could not bind DataSourceSettings properties"));

来获取带有placeholder表达式的配置文件
现在官方的wiki里面已经更新相关函数。建议使用第二种方式

优雅关闭tomcat的改动

  1. 每次服务关闭的时候, 都需要等待运行的进行正常进行关闭, 由于springboot2加入了webflux的原因,之前的tomcat的相关类都进行了改动,所以shutdown相关的代码也要进行改动,不过就是一些类的改变, 整体改动不是很大

数据库相关的改动

  1. 这一块的改动比较大, 因为之前通过BeanFactoryPostProcessor类来读取配置文件动态加载数据源的方式,所以之前是通过加载tomcat-pool来加载的, 现在为hikari,所以数据池初始化的代码都需要改动
  2. 之前tomcat-pool提供了一些监控和日志的功能,但是hikari为了速度这些功能都没有了,所以通过引入了log4jdbc来完成了数据库访问日志的补充
  3. 把之前的mysql的datasource和mybatis的初始化进行了分离, 为了后续的orm框架的接入

redis相关的改动

  1. 由于之前redis操作的封装是直接通过jedisCluster或者jedis来进行访问的, 由于redis的底层依赖被切换到lettuce,所以放弃使用jedis相关的操作,改成直接使用spring-data-redis所提供的template来完成。
  2. 在代码层面统一了redis-single和redis-cluster的使用方式,而是通过不同的配置来区分redis是否是集群,从而达成只能选择的模式。
  3. 通过对于RedisCacheManager的重载,来重新定义了序列化的方式,并且自定义了RedisCacheWriter对于redis失效的情况下继续访问底层的操作
  4. 在改动的过程中发现了spring-data-redis的一些严重的bug,并且给官方进行了上报,目前应该在springboot2的正式版本已经修复。

actuator的相关变动

  1. 现在所有的actuator接口都统一增加了/actuator的前缀
  2. 所有的endpoints的配置全部移动到managent下面了,可以在managent进行不同endpoints的配置
  3. cors相关的配置也移动到了managent下面
  4. endpoints的安全也设置也可以通过继承WebSecurityConfigurerAdapter类来完成代码层面的设置

项目

下面的项目是一部分实验形式的项目,脱离的公司的代码, 可以帮助大家进行迁移,后续会继续进行更新
loc-framework 项目可以帮助大家进行一些学习, 希望得到大家的支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容