最近公司在做监控日志平台的迁移,从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: SourceDirectorySetget() = project.extensions.getByType<KotlinJvmProjectExtension>().sourceSets.getByName(name).kotlinsourceSets.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
注意查看升级后的驱动的依赖版本,注意出现不兼容的情况。
其他的就是一些公司业务代码的改动了,不适合公开了。
希望能对你们有所启发。