---
title: Spring boot升级到2.1
date: 2018-11-26 15:42:04
description: Spring boot从1.5.8升级到2.1.0
categories: [技术总结]
tags: [Spring boot]
---
## 前言
> 用了Spring boot一段时间了,之前都是小版本升级,后来稳定在1.5.8,最近想研究一下升级大版本,于是开始升级之路,将遇到的问题和解决方案记录一下,以备不时之需
- Spring boot版本:`1.5.8.RELEASE` -> `2.1.0.RELEASE`
- Spring Data JPA版本: `1.11.8.RELEASE` -> `2.1.2.RELEASE`
### 更新版本号 - `pom.xml`
在pom.xml中更换版本号,然后maven更新
```xml
org.springframework.boot
spring-boot-starter-parent
2.1.0.RELEASE
```
### 入口 - `SpringBootServletInitializer`
```java
// 更新前
import org.springframework.boot.web.support.SpringBootServletInitializer;
// 更新后
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
```
### 错误处理 - `ErrorPageController`
之前的ErrorPageController是一个错误处理的控制类,替换默认的控制类加入写日志的操作,更新版本后一些默认的类已经发生改变了
```java
// 以下3个对象已经更换到新的包中
import org.springframework.boot.autoconfigure.web.DefaultErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
// 更新后
import org.springframework.boot.web.servlet.error.DefaultErrorAttributes;
import org.springframework.boot.web.servlet.error.ErrorAttributes;
import org.springframework.boot.web.servlet.error.ErrorController;
// ErrorAttributes.getErrorAttributes方法参数从HttpServletRequest改为WebRequest
private ErrorAttributes errorAttributes = new DefaultErrorAttributes();
private Map getErrorAttributes(HttpServletRequest request) {
RequestAttributes requestAttributes = new ServletRequestAttributes(request);
return this.errorAttributes.getErrorAttributes(requestAttributes, false);
}
// 更新后
private Map getErrorAttributes(WebRequest request) {
return this.errorAttributes.getErrorAttributes(request, false);
}
```
### 开启多个连接器(同时支持http和https) - `MultiConnectorsConfiguration`
有些小改动,照抄官网例子:
```java
// 更新前
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
// 更新后
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
```
### 计数器 - `CounterService`
新版本没有这个类了,暂时先去掉
```java
import org.springframework.boot.actuate.metrics.CounterService;
// codehale metrics
@Autowired
@Qualifier("counterService")
private CounterService counterService;
```
### Spring Data JPA相关的问题
存储库的一些自带方法变化了
```java
// 老的版本
Book book = dao.findOne(id);
dao.save(list);
dao.delete(id);
dao.delete(list);
// 新的版本
Optional book = dao.findById(id);
dao.saveAll(list);
dao.deleteById(id);
dao.deleteAll(list);
```
### Spring Boot Admin相关的问题
Spring Boot Admin也需要使用新的版本了,否则无法启动,配置文件一些参数发生了变化
版本升级:`1.5.4` -> `2.1.0`
> Spring Boot Admin的server端也需要更新,更新后的UI已经用Vue重写了,很惊艳!
配置文件改动:
```yaml
# 老的版本
spring.boot.admin.url=...
spring.boot.admin.client.service-url=...
management.security.enabled=false
# 新的版本
spring.boot.admin.client.url=...
spring.boot.admin.client.instance.service-url=...
management.endpoints.web.exposure.include=*
```
### 其他配置改动 - `application.properties`
```yaml
# 老的版本
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=20MB
spring.datasource.initialize=true
flyway.enabled=false
# 新的版本
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB
spring.datasource.initialization-mode=always
spring.flyway.enabled=false
```
### 跨域问题 - `CORSConfiguration`
原先配置的WebMvcConfigurerAdapter已经过期了,现在直接用WebMvcConfigurer
```java
// 老的版本
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
// 新的版本
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
```
### 未完待续。。。
经过修改,项目已经可以运行了,接下来开始解决测试类报错的问题