Spring boot でサーバ別の properties ファイルを読み込む
この手の記事は日付に気を付けないとすぐに古くなる。これは2015/10の記事。
@PropertySourceを使う。下記が詳しい。
Spring @PropertySource - Jayway
今回の場合は /src/main/resource配下にconfigディレクトリを掘ったのち、
環境変数 SPRING_PROFILES_ACTIVE を指定して読み込む。
これは、サーバ別に設定を読み分けたい場合、application.properties も同様の環境変数を指定することによりproperties ファイルを読み分けられるから、そのついでということである。
Spring-Bootの設定プロパティと環境変数 - Qiita
STS での環境変数の設定は RUN->RUN Configurations -> Enviroment に書き込むと使える。
@Data
@Configuration
@PropertySource( "classpath:config/ServerConfig-${SPRING_PROFILES_ACTIVE}.properties" )
public class ServerConfig
{
@Value( "${config.server_name}" )
private String serverName;
というクラスを書く。ここはclasspath:であってfile:と書くとファイルねーよ、と言われる。
そして、config/ServerConfig-localhost.propertiesファイルを作る。
中身は
config.server_name=hogehoge
とする。
ここで躓いた。
Invalid property 'name' of bean class
とかエラーが出て何事かと思ったが
server_name=hogehoge
ではなく、大枠を指定する必要があり、
config.server_name=hogehoge
と書くと動作した。
前の記事にある、java 8の場合の項
@PropertySource("default.properties")
@PropertySource(value = "file:${CONF_DIR}/optional-override.properties", ignoreResourceNotFound = true)
これだと、環境変数無い場合のデフォルトを作れていいなあ