Kotlin和Spring Boot @ConfigurationProperties

27 浏览
0 Comments

Kotlin和Spring Boot @ConfigurationProperties

如何在Spring Boot中使用Kotlin正确初始化ConfigurationProperties?

目前我像下面的示例那样操作:

@ConfigurationProperties("app")

class Config {

var foo: String? = null

}

但是这看起来相当丑陋,实际上`foo`不是一个变量,而是一个常量`val`,应该在启动时进行初始化,并且将来不会更改。

0
0 Comments

Kotlin和Spring Boot @ConfigurationProperties问题的出现原因是在Spring Boot 2.2.0之前,需要提供一个Java Bean来使用@ConfigurationProperties。这意味着属性需要有getter和setter方法,因此无法使用val关键字。

解决方法是在Spring Boot 2.2.0中已经解决了这个问题,可以使用数据类来代替Java Bean。以下是一个示例:

@ConfigurationProperties("example.kotlin")

data class KotlinExampleProperties(

val name: String,

val description: String,

val myService: MyService) {

data class MyService(

val apiToken: String,

val uri: URI

)

}

使用@ConfigurationProperties注解的类可以通过在application.properties文件中设置属性值来配置。例如,在给定的代码示例中,可以使用以下方式设置属性值:

example.kotlin.myService.apiToken=YourToken

example.kotlin.myService.uri=YourUri

这样就可以将属性值传递给具有多个参数的构造函数。

更多详细信息,请参考官方文档:https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/reference/html/spring-boot-features.html#boot-features-kotlin-configuration-properties

此问题已在Spring Boot 2.2.0中解决,相关的GitHub问题链接为:https://github.com/spring-projects/spring-boot/issues/8762

0
0 Comments

在新的Spring Boot 2.2中,出现了Kotlin & Spring Boot @ConfigurationProperties的问题。问题的原因是在Spring Boot 2.2中,可以使用以下方式来进行配置:

(prefix = "swagger")

data class SwaggerProp(

val title: String, val description: String, val version: String

)

并且不要忘记在`build.gradle.kts`中的依赖中包含以下内容:

dependencies {

annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")

}

据我了解,kapt已经取代了annotationProcessor。您应该使用Kotlin 1.3.50+,并且在依赖中使用`plugins { ... kotlin("kapt") }`和`kapt(...)`来包装依赖字符串,而不是使用`annotationProcessor(...)`。

0
0 Comments

Kotlin & Spring Boot @ConfigurationProperties 是一个常见的问题,出现的原因是为了在Kotlin中使用Spring Boot的@ConfigurationProperties注解来读取配置文件中的属性。这个问题的解决方法是通过创建一个包含配置属性的类,并使用@ConfigurationProperties注解将其与配置文件中的属性关联起来。

首先,在application.yml文件中定义了一些属性,包括my-host、my-port、my-user和my-pass。

然后,在Kotlin文件中创建了一个名为MqttProperties的类,并使用@ConfigurationProperties注解将其与前缀为"myconfig"的属性关联起来。这个类包含了与配置文件中的属性对应的变量。

对于非原始类型的属性,可以使用lateinit关键字来延迟初始化变量。

要从其他Spring组件或其他类中访问这些属性,可以获取创建的配置bean,并在其他组件和服务中使用该bean。

如果配置文件中缺少某些lateinit属性,将会抛出kotlin.UninitializedPropertyAccessException异常。

总之,通过使用Kotlin和Spring Boot的@ConfigurationProperties注解,可以方便地读取配置文件中的属性,并将其与Kotlin类中的变量关联起来,从而简化了配置文件的处理过程。

0