我在从Spring Boot 1.4升级到2.0的迁移中做了哪些事情

首先

上一次,我们从SpringBoot 1.5升级到Spring Boot 2.0。
这一次在另一个项目中,我将写一些关于从1.4升级到2.0时遇到的问题。

這一次,我主要遇到困難的是,

    • 問題の原因が 1.4->1.5の部分なのか、1.5->2.0の部分なのかの切り分けに時間がかかった

 

    • Thymeleafの影響が大きいのでテストが大変

 

    • SpringSessionでのシリアライズ/デシリアライズまわり

 

    本番デプロイ時の対策

这附近。

升级Spring Boot版本

更新spring-boot-starter-parent的版本

在pom.xml文件中指定Spring Boot的版本。

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath />
  </parent>

删除HikariPC的依赖关系。

由于最初使用HikariPC,所以将其从依赖关系中移除。

    <dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    </dependency>

编译并解决错误逐步前进。

找不到SpringBootServletInitializer。

1.png

由于SpringBootServletInitializer的包已更改,因此需要重新导入。

找不到org.springframework.boot.context.embedded

2.png

由于包名已更改为 org.springframework.boot.web.servlet,请重新导入。

找不到 DataSourceBuilder。

3.png

由于包装已更改,因此需要重新导入。

WebMvcConfigurerAdapter 的弃用

将 extends WebMvcConfigurerAdapter 更改为 implements WebMvcConfigurer。

@EnableWebMvcSecurity已被弃用。

更改为 @EnableWebSecurity。

找不到org.apache.velocity.app

4.png

从速度转变为胡子。

-    <dependency>
-   <groupId>org.apache.velocity</groupId>
-   <artifactId>velocity</artifactId>
-    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-mustache</artifactId>
+    </dependency>

将 velocity的模板文件*.vm替换为mustache模板文件*.mustache。
※可以在application.properties等文件中进行更改。

根据mustache模板的格式调整

${hoge}
↓
{{hoge}}

用这种感觉全部替换

虽然可以使用Shell或其他工具进行批量替换,但如果使用IntelliJ的重构功能,它还能找到调用代码并告诉你,所以如果替换数量不多的话,使用IntelliJ的重构可能更好。

找不到org.json

5.png

添加以下依赖关系

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-json</artifactId>
    </dependency>

请使用以下包重新导入:
org.springframework.boot.configurationprocessor.json.JSONObject

在调用SpringApplication.run时出现错误。

6.png

SpringApplication.run方法的参数已经发生了变化。

以下的修正如下:

        public static void main(String[] args) {
-               Object[] objects = { HogeApplication.class, FugaService.class };
-               SpringApplication.run(objects, args);
+               final SpringApplication application = new SpringApplication(HogeApplication.class, FugaService.class);
+               application.run(args);
        }

顺便继承下面的类。

SpringBootServletInitializer: 春季启动器Servlet初始化器

对JPA方法修改的处理

7.png

悄然修复

无法找到AutoConfigureTestDatabase。

8.png

将导入的包从import org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureTestDatabase;更改为import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;

Thymeleaf的迁移

将”th:substituteby”替换为”th:replace”

用机械化的方式

find src/main/resources -type f -name "*.html" -print | xargs sed -i  -e 's/th:substituteby/th:replace/g'

删除link标签中type=”text/css”的CSS加载

这样以机械方式

find src/main/resources -type f -name "*.html" -print | xargs sed -i  -e 's@type=\"text/css\"@@g'

删除 inline=”text” / inline=”inline”。

在查看内容的同时进行删除。

广告
将在 10 秒后关闭
bannerAds