如何正确初始化ConfigurationProperties 春季启动 同 科特林?
目前 我喜欢在下面的例子中:
@ConfigurationProperties("app")
class Config {
var foo: String? = null
}
但它实际上看起来很丑陋 foo
不是一个 var
可爱,foo是 不变 val
你和 应该在启动期间初始化,并且将来不会改变。
如何正确初始化ConfigurationProperties 春季启动 同 科特林?
目前 我喜欢在下面的例子中:
@ConfigurationProperties("app")
class Config {
var foo: String? = null
}
但它实际上看起来很丑陋 foo
不是一个 var
可爱,foo是 不变 val
你和 应该在启动期间初始化,并且将来不会改变。
如中所述 文档: 一个 ”Java Bean“必须提供才能使用 ConfigurationProperties
。这意味着您的属性需要具有getter和setter val
目前是不可能的。
getter和setter通常是必需的,因为绑定是通过标准的Java Beans属性描述符,就像在Spring MVC中一样。有些情况下可能会省略定位器[...]
有一个 公开问题 与您的用例相关的Kotlin: https://github.com/spring-projects/spring-boot/issues/8762
@Value("\${some.property.key:}")
lateinit var foo:String
可以这样使用
这就是我做的方式:
application.properties
my.prefix.myValue=1
MyProperties.kt
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.stereotype.Component
@Component
@ConfigurationProperties(prefix = "my.prefix")
class MyProperties
{
private var myValue = 0
fun getMyValue(): Int {
return myValue;
}
fun setMyValue(value: Int){
myValue = value
}
}
MyService.kt
@Component
class MyService(val myProperties: MyProperties) {
fun doIt() {
System.console().printf(myProperties.getMyValue().toString())
}
}
以下是我使用application.yml文件的方法。
myconfig:
my-host: ssl://example.com
my-port: 23894
my-user: user
my-pass: pass
这是kotlin文件:
@Configuration
@ConfigurationProperties(prefix = "myconfig")
class MqttProperties {
lateinit var myHost: String
lateinit var myPort: String
lateinit var myUser: String
lateinit var myPass: String
}
这对我很有用。