【Spring】オリジナルの `.properties` ファイルを作成・読み込み
メモ。
Spring では application.properties
以外に独自の .properties
を生成し、その中で定義した値を使用することができます。
オリジナル .properties
ファイルの作成とプロパティの参照
例えば、オリジナルのプロパティファイル myconfig.properties
を以下のように作成したとします。
myconfig.properties
config.hoge=1 config.fuga='https://www.fuga.com' config.piyo.foo='foo.' config.piyo.bar=2
このプロパティファイルの設定をSpring内のコードにマッピングするための、 以下のようなクラスを定義します。
@Configuration @PropertySource("classpath:myconfig.properties") @ConfigurationProperties(prefix = "config") @Getter public final class MyConfig { public static class Piyo { private String foo; private Integer bar; } private Integer hoge; private String fuga; private Piyo piyo }
@PropertySource
指定したクラスにどのプロパティファイルの内容をマッピングするのかを指定します。 上の例では MyConfig
クラスに myconfig.properties
ファイルをマッピングするよう指定しています。 classpath:
はクラスパス配下であることを表し、 myconfig.properties
がクラスパスを通したディレクトリ下にあれば良いことを示しています。
@ConfigurationProperties
myconfig.properties
でどのようなプレフィックスを受け入れるかを設定しています。ここでは config
を指定しているので、MyConfigクラスはmyconfig.properties
の各パラメータ名の前に config.
を付けることを要求します。
マッピングの定義が完了したMyConfigクラスには @Configuration
(@Conponentが付加されたアノテーション)が付加されているので、下記のように他コンポーネントへDIによるインスタンス化を行うことができます。
@Service public class HogeService { private static final Logger logger = LoggerFactory.getLogger(LogUtils.class); @Autowired private MyConfig config; public void printFuga() { logger.info(config.getFuga()); } }
環境変数を参照する
下記のように @PropertySource
に渡すvalue値には外部環境変数への参照を記述することができます。
@PropertySource("classpath:myconfig-${ENV}.properties") // 環境変数を追
これにより、例えばデプロイ環境によって適用したいカスタム properties
ファイルの切り替えを行うことが可能です。