赞
踩
最近公司在做监控日志平台的迁移,从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
注意查看升级后的驱动的依赖版本,注意出现不兼容的情况。
其他的就是一些公司业务代码的改动了,不适合公开了。
希望能对你们有所启发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。