SpringBoot 2.0.x 升级踩坑记录

一、背景

公司近期整体架构升级,沉登负责所在项目的具体升级,过程中出现了一些意料之外的big,在这里记录下来,给自己提个醒,也作后来者的前车之鉴。升级工程目前已上线,后续有其他问题出现,会持续更新的。

1.1 升级目标

  1. SpringBoot 2.0.6 升级至 2.1.8
  2. SpringCloud Finchley.SR2 升级至 Greenwich.SR3

1.2 其他环境

  1. Java 10
  2. maven 3.6.3

二、正文

2.1 MySQL时区问题

2.1.1 现象描述

使用升级后SpringBoot和SpringCloud测试时,发现数据入库时间与现实时间有8小时时差(比现在早8小时),但除了生产版本外,没做任何改动,包括数据库配置及服务器配置。虽然想到时区问题,需要额外指定时区,但没升级前也是没有指定时区,却没有出现时差问题。令人十分苦恼。

2.1.2 原因分析

通过查阅依赖版本(强烈建议安装maven helper插件),发现SpringBoot 2.0.6 使用的MySQL版本是 5.1.47,而SpringBoot 2.1.8 使用的MySQL版本是 8.0.17。二者的差别在于,在MySQL 5.x版本中是没有时区配置的,但MySQL 8.x中新增了这个时区配置,并且默认时区是UTC时区,比北京时间晚8个小时。所以我们用的时候就被出现了时区问题。

2.1.3 解决方案

修改数据库配置,增加时间(serverTimezone=Asia/Shanghai)的配置。

spring.datasource.url=jdbc:mysql://*?serverTimezone=Asia/Shanghai

2.2 jackson 序列化问题

2.2.1 现象描述

沉登测试时发现,原本通过jackson提供的Json转POJO的方法,出现异常:

Caused by: java.lang.IllegalStateException: Conflicting/ambiguous property name definitions (implicit name 'lengthOfEmployed'): found multiple explicit names: [workyear, lengthOfEmployed], but also implicit accessor: [method com.vcredit.routeplatform.common.domain.dto.preapproval.ExtensionMappingDTO$CreditInfo#getLengthOfEmployed(0 params)][visible=true,ignore=false,explicitName=false]

实际在lengthOfEmployed字段上,加了@JsonProperty注解。

@JsonProperty("workyear")
private String lengthOfEmployed;

2.2.2 原因分析

还是查询依赖版本,发现SpringBoot 2.0.6 使用的 lombok 版本是 1.16.22,而 SpringBoot 2.1.8 使用的lombok 版本是 1.18.8。具体原因不明。

2.2.3 解决方案

升级SpringBoot版本后,将 lombok 降级为 1.16.22。

三、总结

版本升级到处是坑,虽然已经万分小心,但仍然被上述两个问题困扰许久,谨以此记,下不为例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值