栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot 2.0.x 升级踩坑记录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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。

三、总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/936969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号