Spring Boot:更改属性占位符指示符

Jas*_*ues 12 java spring kotlin spring-boot

在Spring Boot中更改属性占位符的前缀和后缀的最简单方法是什么?

默认情况下@Value("${some.property}"),这在Kotlin中看起来很难看,因为它需要被转义 - $ {something}是Kotlin中用于String模板的语言功能.

Séb*_*uze 24

可以通过在配置中声明以下bean来自定义使用的前缀:

@Bean
fun propertyConfigurer() = PropertySourcesPlaceholderConfigurer().apply {
    setPlaceholderPrefix("%{")
}
Run Code Online (Sandbox Code Playgroud)

如果你有任何@LocalServerPort使用${...}语法的现有代码(如Spring Boot执行器或),你应该声明:

@Bean
fun kotlinPropertyConfigurer() = PropertySourcesPlaceholderConfigurer().apply {
    setPlaceholderPrefix("%{")
    setIgnoreUnresolvablePlaceholders(true)
}

@Bean
fun defaultPropertyConfigurer() = PropertySourcesPlaceholderConfigurer()
Run Code Online (Sandbox Code Playgroud)

像美元一样逃避美元@Value("\${some.property}")是另一种可能不需要@Bean申报的选择.

对于配置的Spring Boot测试,@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)您可以使用@LocalServerPort而不是@Value("\${local.server.port}").

@ConfigurationProperties是一个更好的选择,特别是对于Kotlin数据类,但是目前你必须使用具有可空var属性的Kotlin类,因为只支持getter/setter.您可以对此问题或评论进行投票,以表明您对在Spring Boot 2.x中获得支持的兴趣.