升级项目版本: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 模块。

只要将其作为依赖添加到项目中,它不仅会分析应用程序的环境并在启动时打印诊断信息,而且还会在运行时阶段为项目临时将属性迁移至新的配置方式。

效果如图:

此模块虽然能临时解决我们的问题,但是也不是长久之计,我们在控制台查看到所需要迁移的属性后,应该手动休整

在项目属性修改完成后应当移除此模块

posted @ 2019-01-22 17:07  市井俗人  阅读(5115)  评论(0编辑  收藏  举报