56 votes

Kotlin & Spring Boot @ConfigurationProperties

Comment initialiser correctement ConfigurationProperties dans Spring Boot avec Kotlin ?

Actuellement , j'aime dans l'exemple ci-dessous:

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

Mais il semble assez moche et en fait foo n'est pas un var iable, foo est constant val ue et devrait être initialisé au démarrage et ne changera pas à l'avenir .

53voto

thebigdog Points 411

Voici comment le faire fonctionner avec mon fichier application.yml.

 myconfig:
  my-host: ssl://example.com
  my-port: 23894
  my-user: user
  my-pass: pass
 

Voici le fichier kotlin:

 @Configuration
@ConfigurationProperties(prefix = "myconfig")
class MqttProperties {
    lateinit var myHost: String
    lateinit var myPort: String
    lateinit var myUser: String
    lateinit var myPass: String    
}
 

Cela a très bien fonctionné pour moi.

20voto

s1m0nw1 Points 21698

Comme indiqué dans les docs: Un "Java Bean" doit être fourni afin d'utiliser ConfigurationProperties. Cela signifie que les propriétés de votre besoin d'avoir des getters et setters, ainsi val n'est pas possible pour le moment.

Les accesseurs et mutateurs sont généralement obligatoires, puisque la liaison est via le standard Java Beans propriété descripteurs, tout comme dans Spring MVC. Il y a des cas où un setter peut être omise [...]

Ce problème a été résolu pour le Printemps de Démarrage 2.2.0, qui est censé être publié prochainement: https://github.com/spring-projects/spring-boot/issues/8762

4voto

StanislavL Points 31343
 @Value("\${some.property.key:}")
lateinit var foo:String
 

pourrait être utilisé de cette façon

1voto

EJJ Points 360

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"

 

0voto

Qutory Points 1

Voici comment je l'ai fait:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X