Spring Boot 1.x升级到Spring Boot 2.0迁移指南

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(4077)   2023-03-28 11:29:14

☆.JDK版本的升级

  • Spring Boot 1.x jdk 7 起飞
  • Spring Boot 2.x jdk8 起飞


☆.三方类库升级

  • 1) Spring Framework 5+
  • 2) Tomcat 8.5+
  • 3) Flyway 5+
  • 4) Hibernate 5.2+
  • 5) Thymeleaf 3+

更多依赖版本升级参考


☆.spring boot 项目打包为war需要实现的SpringBootServletInitializer类路径变化

// 1.0
//import org.springframework.boot.web.support.SpringBootServletInitializer;
// 2.0
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 
@SpringBootApplication
public class UserManageApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(UserManageApplication.class);
    }
 
    public static void main(String[] args) throws Exception {
        SpringApplication.run(UserManageApplication.class, args);
    }
}

☆.thymeleaf 布局依赖需独立添加

Spring Boot 2.0 中spring-boot-starter-thymeleaf 包默认并不包含布局模块,需要使用的时候单独添加。
<dependency>
   <groupId>nz.net.ultraq.thymeleaf</groupId>
   <artifactId>thymeleaf-layout-dialect</artifactId>
</dependency>


☆.Spring Boot 2.0 WebMvcConfigurerAdapter提示过时

升级后的springBoot,使用了java8的特性 default 方法,所以直接实现 WebMvcConfigurer 这个接口即可。
Spring Boot 1.x 
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter
Spring Boot 2.0
public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer

☆.静态资源被拦截

1.5版本时候META-INF/resources / resources / static / public 都是spring boot 认为静态资源应该放置的位置,会自动去寻找静态资源,而在spring boot 2.0则对静态资源也进行了拦截,当拦截器拦截到请求之后,但controller里并没有对应的请求时,该请求会被当成是对静态资源的请求。此时的handler就是 ResourceHttpRequestHandler,就会抛出上述错误。
解决方案:
/**  
* 拦截器 
* @param registry 
*/ 
@Override 
public void addInterceptors(InterceptorRegistry registry) { 

// addPathPatterns 用于添加拦截规则 
// excludePathPatterns 用户排除拦截 
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatternss("/toLogin","/login","/assets/**","/js/**");
}
assets就是放静态文件的目录
 

☆.全局异常特殊处理

Spring Boot 1.x 
@Configuration
    public class ContainerConfig {
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer(){
            return new EmbeddedServletContainerCustomizer(){
                @Override
                public void customize(ConfigurableEmbeddedServletContainer container) {
                    container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500"));
                    container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404"));
                }
            };
        }
    }
Spring Boot 2.0
@Configuration
public class ContainerConfig implements ErrorPageRegistrar {
    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        ErrorPage[] errorPages = new ErrorPage[2];
        errorPages[0] = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500");
        errorPages[1] = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
        registry.addErrorPages(errorPages);
    }
}

 

☆.Spring Boot 2.0默认数据源由tomcat改变为Hikari

如果之前的Spring  Boot 1.x项目使用了spring.datasource.tomcat.xxx配置数据源,需要修改为hikari否则默认数据源将会无法被初始化
spring.datasource.hikari.username=
spring.datasource.hikari.password=
spring.datasource.hikari.driver-class-name=
spring.datasource.hikari.jdbc-url=

☆.Spring Boot 2.0 日期类型数据默认返回改变 

Spring Boot 1.x日期类型数据在不指定格式的情况下,默认返回的是时间戳。
Spring Boot 2.0日期类型数据默认返回的是字符串的一个日期格式

Spring Boot 2.0 中在application.properties文件中配置以下内容来默认返回时间戳
spring.jackson.serialization.write-dates-as-timestamps = true
 

☆.Spring Data Jpa 相关改动

Spring Boot 2.0 去掉了findOne()方法
以前的findOne()方法其实就是根据传入的 Id 来查找对象,所以在 Spring Boot 2.0 的 Repository 中我们可以使用findById(long id)来替换使用。

delete()方法和findOne()类似也被去掉了,可以使用deleteById(Long id)来替换,还有一个不同点是deleteById(Long id)默认实现返回值为void

分页组件PageRequest变化
在 Spring Boot 2.0 中 ,方法new PageRequest(page, size, sort) 已经过期不再推荐使用,推荐使用以下方式来构建分页信息:
Pageable pageable =PageRequest.of(page, size, Sort.by(Sort.Direction.ASC,"id"));
地址:https://www.leftso.com/article/484.html

相关阅读

Spring Boot 1.x升级到Spring Boot 2.0迁移指南
Spring Boot 2.0 Redis整合,通过spring boot 2.0整合Redis作为spring缓存框架的实现。
Spring Boot 2.0 绑定properties属性资源文件 Spring Boot 2.0 读取properties配置文件值 Spring Boot 2.0获取properties配...
spring boot 2.0 security 5.0 整合,实现自定义表单登录。spring boot 2.0框架使用。
Spring Boot 2.0 支持的Apache Camel 版本发布了_Apache Camel 2.22发布支持Spring Boot 2.0
Spring Boot 2.0 有哪些新特性_Spring Boot 2.0新功能,在本文中,我们将探讨为Spring Boot 2.0计划的一些更改和功能。我们还会描述这些变化如何帮助我们提高...
Spring Boot 2.0,Spring框架的Spring Boot 中的Spring Boot Actuator变化讲解。并且了解如何在Spring Boot 2.0中使用Actuator...
Spring boot 1.x官方即将停止开发及维护Spring Boot 1.x EOL 2019年1月1日
Spring Boot 2.0 @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") 注解格式化日期失效原因及解决。