web-dev-qa-db-ja.com

KotlinとSpring Boot @ConfigurationProperties

Spring BootでConfigurationPropertiesを適切に初期化する方法Kotlin

現在以下の例のようにしています:

 @ConfigurationProperties("app")
 class Config {
     var foo: String? = null
 }

しかし、見た目はかなりく、実際にはfoovariableではなく、fooはconstantvalueおよびshould起動時に初期化され、今後変更されません

28
Sonique

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    
}

これは私にとってはうまくいきました。

34
Ray Hunter

docs で述べたように、ConfigurationPropertiesを使用するには、「Java Bean」を提供する必要があります。これは、プロパティにゲッターとセッターが必要であるため、現時点ではvalは使用できないことを意味します。

通常、バインディングは標準のJava Spring MVCのようにBeansプロパティ記述子を介して行われます。セッターを省略できる場合があります。[...]

これは、まもなくリリースされる予定のSpring Boot 2.2.0で解決されました。 https://github.com/spring-projects/spring-boot/issues/8762

10
s1m0nw1
@Value("\${some.property.key:}")
lateinit var foo:String

このように使用できます

2
StanislavL

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"

1
EJJ

これは私がそれをやった方法です:

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())
    }
}
0
Qutory