Spring BootでConfigurationPropertiesを適切に初期化する方法Kotlin?
現在以下の例のようにしています:
@ConfigurationProperties("app")
class Config {
var foo: String? = null
}
しかし、見た目はかなりく、実際にはfoo
はvar
iableではなく、fooはconstantval
ueおよびshould起動時に初期化され、今後変更されません。
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
}
これは私にとってはうまくいきました。
docs で述べたように、ConfigurationProperties
を使用するには、「Java Bean」を提供する必要があります。これは、プロパティにゲッターとセッターが必要であるため、現時点ではval
は使用できないことを意味します。
通常、バインディングは標準のJava Spring MVCのようにBeansプロパティ記述子を介して行われます。セッターを省略できる場合があります。[...]
これは、まもなくリリースされる予定のSpring Boot 2.2.0で解決されました。 https://github.com/spring-projects/spring-boot/issues/8762
@Value("\${some.property.key:}")
lateinit var foo:String
このように使用できます
application.properties
metro.metro2.url= ######
Metro2Config.kt
@Component
@ConfigurationProperties(prefix = "metro")
data class Metro2PropertyConfiguration(
val metro2: Metro2 = Metro2()
)
data class Metro2(
var url: String ?= null
)
build.gradle
Plugins:
id 'org.jetbrains.kotlin.kapt' version '1.2.31'
// kapt dependencies required for IntelliJ auto complete of kotlin config properties class
kapt "org.springframework.boot:spring-boot-configuration-processor"
compile "org.springframework.boot:spring-boot-configuration-processor"
これは私がそれをやった方法です:
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())
}
}