Kotlin 與 Spring boot整合,@Value的問題

騎驢上塔樓發表於2017-09-02

Kotlin 與 Spring boot整合,@Value的問題

Java與Spring boot整合@Value的用法

...
@Value("${url}")
private String url;
...

Kotlin中無法這麼使用,因為"${xxx}"在kotlin裡面會被編譯器解析

我們來看下kotlin的語法

val s = "abc"
val str = "$s.length is ${s.length}" // 求值結果為 "abc.length is 3"

解決方案有三種

  1. 加上轉義標識

    @Value("${some.property}")
  2. 修改@Value中的識別符號$修改為其他

    @Bean
    fun kotlinPropertyConfigurer() = PropertySourcesPlaceholderConfigurer().apply {
        setPlaceholderPrefix("%{")
        setIgnoreUnresolvablePlaceholders(true)
    }
    
    @Bean
    fun defaultPropertyConfigurer() = PropertySourcesPlaceholderConfigurer()
  3. 使用@ConfigurationProperties

    @Component
    @ConfigurationProperties("foo")
    class Properties() {
        lateinit var a: String
        lateinit var b: String
    }
    
    @SpringBootApplication
    @EnableConfigurationProperties(Properties::class)
    class Application
    
    fun main(args: Array<String>) {
        SpringApplication.run(Application::class.java, *args)
    }

歡迎大家加入kotlin QQ群:188963176,一起學習

相關文章