歩行訓練

おいっちにー!

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 に書き込むと使える。

この環境変数の中身は「localhost」とする。

@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) 

 これだと、環境変数無い場合のデフォルトを作れていいなあ