しおしお

IntelliJ IDEAのことなんかを書いてます

Spring Bootの@Valueに指定するプレースホルダのプレフィックスを変更する方法

@Valueアノテーションを使ってプロパティの値をインジェクションする場合、デフォルトではプレフィックスに${を指定する必要がある。
Javaで書いてる場合は問題ないけど、Kotlinを使うと文字列内の$は変数を展開するために使うので下のコードのようにエスケープしないとダメで残念な感じになります。

@Value("\${target.host}") private val host:String

プレフィックスはこんな感じに、PropertySourcesPlaceholderConfigurerを使うことで変更できます。

@Bean
open fun propertyConfigurer() : PropertySourcesPlaceholderConfigurer {
  val propertySourcesPlaceholderConfigurer = PropertySourcesPlaceholderConfigurer()
  propertySourcesPlaceholderConfigurer.setPlaceholderPrefix("&{")
  eturn propertySourcesPlaceholderConfigurer
}

これで、$のエスケープが不要になります。

@Value("&{target.host}") private val host:String

参考にした情報です。
stackoverflow.com

※ConfigurationPropertiesを使えばValueアノテーション使わなくていいので、単純にこの問題を回避できる。
そもそも、プロパティの値を保持するBeanはJavaで書いたほうが幸せになりそうな気もする。