SpringBoot2升级到SpringBoot3总结

最近公司在做监控日志平台的迁移,从NewRelic迁移到Dynatrace,为了配合迁移,有一个前提就是把SpringBoot2升级到SpringBoot3。

我们这边的项目大多数都是Kotlin+SpringBoot2.X的技术栈,现在要全部升级到最新的SpringBoot3.2.2或者SpringBoot3.2.3,还是以Kotlin为主。

下面是官方指导:Preparing for Spring Boot 3.0

首先做的第一件事:把JDK11升级到JDK17,以及把kotlin升级到1.9.21。

因为项目是使用的Gradle构建的,所以需要把一些不兼容的语法给升级了,例如旧的语法是:

sourceSets {
    create("common-tests") {
        withConvention(KotlinSourceSet::class) {
            kotlin.srcDir("src/common-tests/kotlin")
            resources.srcDir("src/common-tests/resources")
            compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
            runtimeClasspath += output + compileClasspath
        }
    }
    create("integration-tests") {
        withConvention(KotlinSourceSet::class) {
            kotlin.srcDir("src/integration-tests/kotlin")
            resources.srcDir("src/integration-tests/resources")
            resources.srcDir("src/main/resources/schemas")
            compileClasspath += sourceSets["main"].output + sourceSets["common-tests"].output + configurations["testRuntimeClasspath"]
            runtimeClasspath += output + compileClasspath
        }
    }
    test {
        withConvention(KotlinSourceSet::class) {
            compileClasspath += sourceSets["common-tests"].output + configurations["testRuntimeClasspath"]
            runtimeClasspath += output + compileClasspath
        }
    }
}

修改后是:

val SourceSet.kotlin: SourceDirectorySet
    get() = project.extensions.getByType<KotlinJvmProjectExtension>().sourceSets.getByName(name).kotlin

sourceSets.create("common-tests") {
    kotlin.srcDir("src/common-tests/kotlin")
    resources.srcDir("src/common-tests/resources")
    compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
    runtimeClasspath += output + compileClasspath
}

sourceSets.create("integration-tests") {
    kotlin.srcDir("src/integration-tests/kotlin")
    resources.srcDir("src/integration-tests/resources")
    resources.srcDir("src/main/resources/schemas")
    compileClasspath += sourceSets["main"].output + sourceSets["common-tests"].output + configurations["testRuntimeClasspath"]
    runtimeClasspath += output + compileClasspath
}

sourceSets.test {
    compileClasspath += sourceSets["common-tests"].output + configurations["testRuntimeClasspath"]
    runtimeClasspath += output + compileClasspath
}

等等,还有一些就不列举了。

最后如果项目中用到了HttpClient,就是需要自己单独引入,因为SpringBoot3没有了。

implementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") {
        exclude(group = "commons-logging", module = "commons-logging")
    }

因为启动的提示,所以排除了commons-logging包。同时Httpclient的配置也需要修改:

private fun getClientHttpRequestFactory(): ClientHttpRequestFactory {
        val requestConfig = RequestConfig.custom()
            .setConnectTimeout(workspaceDesignerConfigurationTimeout.toLong(), TimeUnit.MILLISECONDS)
            .setResponseTimeout(workspaceDesignerConfigurationTimeout.toLong(), TimeUnit.MILLISECONDS)
            .build()

        val httpClient = HttpClients.custom()
            .setDefaultRequestConfig(requestConfig)
            .build()

        return HttpComponentsClientHttpRequestFactory(httpClient)
    }

再就是两个注解的引用:

@field:NotBlank
@field:Size(min = 1, max = 30)

他们之前所在包是:

import javax.validation.constraints.NotBlank
import javax.validation.constraints.Size

升级后需要修改到:

import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.Size

注意查看升级后的驱动的依赖版本,注意出现不兼容的情况。

其他的就是一些公司业务代码的改动了,不适合公开了。

希望能对你们有所启发。

相关推荐

  1. SpringBoot2升级SpringBoot3总结

    2024-04-04 16:56:03       39 阅读
  2. springboot1.x升级springboot3.x中遇到的问题总结

    2024-04-04 16:56:03       54 阅读
  3. 升级springboot3.2集成shiro的问题

    2024-04-04 16:56:03       33 阅读
  4. SpringBoot 3.0 升级之 Swagger 升级

    2024-04-04 16:56:03       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 16:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 16:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 16:56:03       82 阅读
  4. Python语言-面向对象

    2024-04-04 16:56:03       91 阅读

热门阅读

  1. Linux系统常见命令

    2024-04-04 16:56:03       26 阅读
  2. Nginx基础(02)

    2024-04-04 16:56:03       43 阅读
  3. 全排列问题

    2024-04-04 16:56:03       31 阅读
  4. C语言游戏实战(9):球球大作战

    2024-04-04 16:56:03       30 阅读
  5. HTML&CSS

    HTML&CSS

    2024-04-04 16:56:03      28 阅读
  6. Chrome安装Vue插件vue-devtools

    2024-04-04 16:56:03       36 阅读
  7. 数据结构之图

    2024-04-04 16:56:03       30 阅读
  8. 2024.3.9力扣每日一题——找出数组的第 K 大和

    2024-04-04 16:56:03       34 阅读