升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x
1.升级版本的选择
首先去spring的官网看一下最新的版本与版本之间的依赖
可以看到SpringBoot 2版本的稳定版有:2.0.8跟2.1.2
而SpringCloud的稳定版本为Finchley.SR2
然后我们看一看两者的依赖关系:
经过对比,最终选定版本:SpringBoot2.0.8,SpringCloud Finchley.SR2
2.版本升级的注意事项
2.1.默认连接池的改变
SpringBoot2的默认连接池为HikariCP,这也是本次升级的原因,HikariCP专注于连接池,其性能是其他连接池的n多倍。
更多信息,请看:http://blog.didispace.com/Springboot-2-0-HikariCP-default-reason/
配置数据库连接池(多数据库配置):
@Primary
@Bean(name = "onlineDataSource")
@ConfigurationProperties(prefix = "spring.datasource.online")
public DataSource getDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sxDataSource")
@ConfigurationProperties(prefix = "spring.datasource.sandbox")
public DataSource getDateSource1() {
return DataSourceBuilder.create().build();
}
详细的可以参考:https://www.cnblogs.com/hongdada/p/9360155.html
2.2.其他关联版本的改变
这里有一个坑点
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
这两个依赖在
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
这个里面没办法拉取相关版本依赖,无奈只能手动规定版本
而spring-cloud-starter-eureka的版本只能到1.4.6,点进去其父依赖为spring-cloud-netflix也为1.4.6
但是在springcloud的Finchley.SR2中的依赖应该为2.0.2
不过在修改版本后,其他的依赖会默认覆盖为最新版,因此也没有多大影响
2.3.@EnableFeignClients注解报错
在新版本springcloud中新增了一个组件:spring-cloud-openfeign
Spring Cloud对Feign的支持由org.springframework.cloud:spring-cloud-netflix-core移到org.springframework.cloud:spring-cloud-openfeign-core
因此删除报错的包,重新导入即可。
2.4.SpringApplicationBuilder中的web(boolean)已过时
我们删除,看自动提示,已经修改为:WebApplicationType 枚举类型
看一下官网给的说明:
更多:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/WebApplicationType.html
具体如何选择呢?我们呢点进方法里面看一下:
在点进去看一下
因此这里我们选择:WebApplicationType.SERVLET
2.5.org.hibernate.validator.constraints下一系列注解过时问题
spring-boot-starter-web.jar 中就包含了hibernate-validator
spring boot 2版本包含hibernate-validator版本是6.0.9.Final
删除过时包后,自动导入javax.validation.constraints.下的对应注解即可。
2.6.配置文件更改
2.6.1.redis配置的改变
本来是检测使用的环境问题的,就发现redis的配置标红了
点击查看,搜索后发现已经修改了,多了个前缀jedis
于是将配置文件修改:
现在在点进去看一下:
到这里,max-wait与timeout报错的原因也找到了
传值的类型进行了修改,修改为了java.time.Duration 于是加上时间单位
原因:SpringBoot2版本使用spring-boot-starter-data-redis代替了原来的spring-boot-starter-redis
更多详情:https://blog.csdn.net/sy793314598/article/details/80719224
2.6.3.server配置更改
这里替换为新的就可以了
2.6.3.management配置修改
1.management.context-path迁移
management.context-path 这个修改为新的路径
【补一个坑】关于访问路径的问题
2.0之前默认是 /
于是我们加上 management.context-path:/actuator 设置路径为 /actuator
自定义其他路径就更改management.context-path的值
2.0默认是 /actuator (endpoints.web.base-path)
但是新增了endpoints.web.base-path(默认值为/actuator)属性
将context-path的位置迁移到了server.servlet.context-path,但是也做了保留
于是当两个属性同时使用时,context-path的优先级高于base-path
【补一个坑】
2.关于management.security 下所有配置弃用
在1.5.x版本中通过management.security.enabled=false来暴露所有端点
具体配置类:org.springframework.boot.actuate.autoconfigure.ManagementServerProperties$Security
切换SpringBoot版本为2.x 找到ManagementServerProperties,发现Security内部类已经被删除
暴露端点的新方式:
方式1:
# 启用端点 env
management.endpoint.env.enabled=true
# 暴露端点 env 配置多个,隔开
management.endpoints.web.exposure.include=env
方式2:
方式1中的暴露方式需要一个一个去开启需要暴露的端点,方式2直接开启和暴露所有端点
management.endpoints.web.exposure.include=*
注意在使用Http访问端点时,需要加上默认/actuator 前缀
原文:https://blog.csdn.net/qq_27385301/article/details/82899303
【补一个坑】在yaml文件中,* 号有特殊含义,所以得用双引号引起来,否则没办法启服务,会自动退出。
2.6.4.更多配置修改
可以看一下这个json文件,里面都一一列举了的。
2.7.jdbcUrl is required with driverClassName
在Springboot2.0版本,配置多数据源的时候,会报错
jdbcUrl is required with driverClassName
解决办法如下:
1.在配置文件中使用spring.datasource.jdbc-url,而不是通常使用的spring.datasource.url。
2.在数据源配置时使用DataSourceProperties方法。
原文出处:https://my.oschina.net/chinesedragon/blog/1647846
2.8.敬请期待
3.项目迁移小技巧
在 Spring Boot 2.0 中,许多配置属性已被重命名或被删除,为了方便升级,Spring Boot 发布了一个新的 spring-boot-properties-migrator 模块。
只要将其作为依赖添加到项目中,它不仅会分析应用程序的环境并在启动时打印诊断信息,而且还会在运行时阶段为项目临时将属性迁移至新的配置方式。
效果如图:
此模块虽然能临时解决我们的问题,但是也不是长久之计,我们在控制台查看到所需要迁移的属性后,应该手动休整
在项目属性修改完成后应当移除此模块