1

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,一起学习


骑驴上塔楼
56 声望2 粉丝