最近开发新项目顺便升级 Springcloud Dalston.SR5 到当前最新版 Finchley.SR1
由于 springboot1.5.10到当前最新版 spring2.0.1版本 升级修改比较大,记录一下
首先修改一下springboot cloud 版本号其他不用变
部分配置文件名称修改了 添加一下以下依赖会提示如何迁移
1 <dependencies> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-properties-migrator</artifactId> 5 </dependency> 6 </dependencies>
artifactId
首先遇到的问题 cloud的部分jar的artifactId发生了变化
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-eureka</artifactId> 4 </dependency> 5 6 <dependency> 7 <groupId>org.springframework.cloud</groupId> 8 <artifactId>spring-cloud-starter-feign</artifactId> 9 </dependency> 10 11 <dependency> 12 <groupId>org.springframework.cloud</groupId> 13 <artifactId>spring-cloud-starter-hystrix</artifactId> 14 </dependency> 15 <dependency> 16 <groupId>org.springframework.cloud</groupId> 17 <artifactId>spring-cloud-sleuth-stream</artifactId> 18 </dependency> 19 <dependency> 20 <groupId>org.springframework.cloud</groupId> 21 <artifactId>spring-cloud-starter-zuul</artifactId> 22 </dependency> 23 24
修改为
1 #区分client和server了 设置对应的 2 <dependency> 3 <groupId>org.springframework.cloud</groupId> 4 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 5 </dependency> 6 7 <dependency> 8 <groupId>org.springframework.cloud</groupId> 9 <artifactId>spring-cloud-starter-openfeign</artifactId> 10 </dependency> 11 12 <dependency> 13 <groupId>org.springframework.cloud</groupId> 14 <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> 15 </dependency> 16 <dependency> 17 <groupId>org.springframework.cloud</groupId> 18 <artifactId>spring-cloud-stream</artifactId> 19 </dependency> 20 21 <dependency> 22 <groupId>org.springframework.cloud</groupId> 23 <artifactId>spring-cloud-starter-netflix-zuul</artifactId> 24 </dependency> 25 26
feign
feign的包名发生改变
1org.springframework.cloud.netflix.feign 2变更为 3org.springframework.cloud.openfeign
Zuul
ZuulFallbackProvider 接口 已经过时了 使用FallbackProvider 即可方法基本一致
此外添加了String route, Throwable cause 参数可以根据不同的异常做不同降级处理
ZipKin
zipkin在最新版本中不推荐自建
可手动下载jar 直接运行 link
启动命令,相关配置 通过启动参数添加
1RABBIT_URI=amqp://guest:guest@localhost:5672 STORAGE_TYPE=mysql MYSQL_DB=ag_zipkin MYSQL_USER=root MYSQL_PASS=123456 MYSQL_HOST=localhost MYSQL_USE_SSL=false java -jar zipkin.jar 2
也可继续使用老版本的不升级springboot
HikariCP
由于springboot2 默认使用了 HikariCP 所以原有的替换HikariCP pom里面可以去掉了 如果需要其他的需要替换HikariCP 跟之前一样移除对应依赖
endpoints
所有 endpoints 默认情况下都已移至 /actuator 无论您的应用程序中是否存在和配置 Spring Security,只有端点/health和/info端点都是暴露的 另外端点的格式和具体端点都有很多变化
springboot-admin
由于endponits 变化比较大,需要升级 springboot-admin 为 2.0.1
修改pom依赖
1<dependency> 2 <groupId>de.codecentric</groupId> 3 <artifactId>spring-boot-admin-starter-server</artifactId> 4 <version>2.0.1</version> 5</dependency> 6<dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-web</artifactId> 9</dependency> 10<dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-security</artifactId> 13</dependency> 14<dependency> 15 <groupId>org.springframework.cloud</groupId> 16 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 17</dependency> 18<dependency> 19 <groupId>org.jolokia</groupId> 20 <artifactId>jolokia-core</artifactId> 21</dependency>
由于 Spring Boot 2.0 的 Actuator 只暴露了 /health、/info 两个端口(为了安全考虑), 所以要配置 management.endpoints.web.exposure.include 的属性
1management: 2 endpoints: 3 web: 4 exposure: 5 include: "*"
配置文件修改
server
1server.context-path 2 3修改为 4server.servlet.context-path 5
endpoints
1#全局的endpoints设置已失效 2 3 4endpoints: 5 enabled: true 6 sensitive: false
Flyway
Flyway 配置键被移动到spring命名空间(即spring.flyway)
redis
由于 jedis 升级为lettuce spring.redis.pool 修改为spring.reids.lettuce.pool 也可以移除 lettuce的依赖加上 jredis的
bug
如果出现以下循环引用异常 请升级springboot到2.0.4以上版本 或者设置spring.cloud.refresh.refreshable=none (但是同时也关闭了配置的刷新)
1The dependencies of some of the beans in the application context form a cycle: 2 3 servletEndpointRegistrar defined in class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/web/ServletEndpointManagementContextConfiguration.class] 4 ↓ 5 healthEndpoint defined in class path resource [org/springframework/boot/actuate/autoconfigure/health/HealthEndpointConfiguration.class] 6 ↓ 7 org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration 8┌─────┐ 9| dataSource 10↑ ↓ 11| scopedTarget.dataSource defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class] 12↑ ↓ 13| org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker 14└─────┘