当前位置: 首页 > news >正文

SpringBoot2.x升级后的变化

SpringBoot 2.x较之前的版本有不少的改动,以下记录在实际运用中已经遇到的一些问题:

注意:以下差异基于的SpringBoot两个版本分别为 1.5.9 和 2.0.2 。

1、context-path配置修改

SpringBoot 1.5.9 在properties文件中配置 context-path 的方式如下所示:

server.context-path = XXX

而在SpringBoot 2.0.2中其配置方式变成了

server.servlet.context-path = XXX

这样的改变使 context-path 的归属更加明确,与之一同更改的还有其他多个参数。

2、java时间类型通过Jackson转换后输出格式的变化

使用 SpringMVC 时,如果 Controller 中的方法使用 @ResponseBody 标注的话,则返回结果一般会使用 jackson 将返回结果转换为 json (并非绝对,如果没有引入 jackson 相关jar包而引入了 gson 相关jar包,则转换 json 的操作就由 gson 来完成,以下讨论只适用于 jackson 操作)。

在使用SpringBoot 1.5.9的时候,如果未指定具体的时间格式的话,通过 @ResponseBody 返回带有 java时间类型的结果时,默认会将 java 时间类型( java.util.Date、java.util.Calendar、java.sql.Date、java.sql.Timestamp 等)以时间戳(当前时间的毫秒数)返回,而在SpringBoot 2.0.2则返回格式是经过了格式化的: yyyy-mm-ddTHH:mi:ss。通过对比发现,在SpringBoot 2.0.2自动配置 jackson 时添加了如下配置:

其重点是 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 被设置为了 false,即输出时间格式不以时间戳形式展示,其最终影响的是 jackson 中的 ObjectMapper 对象。

如果想要继续返回时间戳格式的数据,则只需要在properties配置文件中添加如下配置即可:

spring.jackson.serialization.write-dates-as-timestamps=true

注意:SpringBoot 2.0.2 对 java 时间格式的影响对 java8 中新增的 java.time.LocalDateTime 并没有效果,当设置 spring.jackson.serialization.write-dates-as-timestamps=true 时,java.time.LocalDateTime会被转换成一个形如 [2018,5,31,17,58,35] 的数组,而非毫秒数。引用jackson-modules-java8中的描述:

LocalDate, LocalTime, LocalDateTime, and OffsetTime, which cannot portably be converted to timestamps and are instead represented as arrays when WRITE_DATES_AS_TIMESTAMPS is enabled.

 

3、@ConfigurationProperties配置的限制

SpringBoot 中可以使用 @ConfigurationProperties 将一个实体类转变为可配置的类(在properties文件中可以直接配置对应参数的值,如果使用IDE的话,会自动提示)。在 SpringBoot 1.5.9 中设置 @ConfigurationProperties 的 prefix 属性时,使用驼峰命名(如eclipseLink)不会有任何问题,但在 Spring Boot 2.x 启动时会报错:

InvalidConfigurationPropertyNameException: Configuration property name '********' is not valid.

当使用eclipse-link时就不会有任何问题。

4、多数据源配置问题

Spring Boot 2.x中如果配置了多个数据源的话,其中有一项配置是需要注意的:spring.datasource.url!这样的配置有可能是有问题的,需要将其设置成 spring.datasource.jdbc-url!

 

 

参考文章:https://www.toutiao.com/i6647092124950987278/

转载于:https://www.cnblogs.com/java-jun-world2099/articles/10280975.html

相关文章:

  • 算法学习心得
  • 利用Python讲多张图片合成PDF文件
  • Apache Beam实战指南 | 玩转大数据存储HDFSIO
  • 记一次面试题——call、apply、bind模拟实现的更好方式
  • 逻辑运算符
  • 古郡敦煌迎新年初雪 雪漠风光引游人
  • 台湾大学生在威海研习中华文化 感叹收获太多“惊喜”
  • 如何使用 Druid 和 Kafka 构造 Kappa 架构完成流量分析
  • 利用位运算实现加减乘除
  • IT应该自动化的7件事
  • 陕西彬州一男子持刀杀害两名女性 警方发布协查通告
  • 圆方圆:python的错误处理——try语句
  • 洛谷 P1824 【进击的奶牛】
  • 自学自用 = B站(操作系统_清华大学(向勇、陈渝))1
  • Docker下部署自己的LNMP工作环境
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • CAP 一致性协议及应用解析
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Leetcode 27 Remove Element
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty源码解析1-Buffer
  • PAT A1050
  • php ci框架整合银盛支付
  • React的组件模式
  • RxJS: 简单入门
  • storm drpc实例
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • VUE es6技巧写法(持续更新中~~~)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Vue组件定义
  • 半理解系列--Promise的进化史
  • 大型网站性能监测、分析与优化常见问题QA
  • 官方解决所有 npm 全局安装权限问题
  • 前端临床手札——文件上传
  • 小而合理的前端理论:rscss和rsjs
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​io --- 处理流的核心工具​
  • #define 用法
  • #QT(智能家居界面-界面切换)
  • #微信小程序(布局、渲染层基础知识)
  • ${factoryList }后面有空格不影响
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Java)【深基9.例1】选举学生会
  • (二)换源+apt-get基础配置+搜狗拼音
  • (转)树状数组
  • ./configure、make、make install 命令
  • .htaccess配置重写url引擎
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET学习全景图
  • @ConditionalOnProperty注解使用说明