Spring Boot アプリケーション開発をもっと便利に! application.properties で環境変数を活用する方法
Spring Bootのapplication.propertiesで環境変数を使う
概要
- application.properties ファイル内で直接環境変数を参照する
- @Value アノテーションを使って環境変数を注入する
- Environment インターフェースを使って環境変数を取得する
application.properties ファイル内で直接環境変数を参照する
方法
# 環境変数を参照する
key=${環境変数名}
# デフォルト値を設定することも可能
key=${環境変数名:デフォルト値}
例
# データベースの接続先
spring.datasource.url=${DB_URL}
# デフォルト値を設定
spring.datasource.username=${DB_USERNAME:default_user}
注意点
- 環境変数名とプロパティ名は一致させる必要があります。
- デフォルト値を設定する場合は、
:
の後に記述します。
@Value アノテーションを使って環境変数を注入する
- 環境変数を注入したいフィールドに
@Value
アノテーションを記述します。
@Value("${環境変数名}")
private String property;
@Value("${DB_URL}")
private String databaseUrl;
@Value("${DB_USERNAME:default_user}")
private String databaseUsername;
@Value
アノテーションは、@Component
アノテーションで管理されているクラスでのみ使用できます。
Environment インターフェースを使って環境変数を取得する
@Autowired
アノテーションを使ってEnvironment
インターフェースを注入します。Environment
インターフェースのgetProperty()
メソッドを使って環境変数を取得します。
@Autowired
private Environment environment;
String property = environment.getProperty("環境変数名");
@Autowired
private Environment environment;
String databaseUrl = environment.getProperty("DB_URL");
String databaseUsername = environment.getProperty("DB_USERNAME", "default_user");
Environment
インターフェースは、Spring Bootアプリケーションのコンテキスト内に存在する必要があります。
Spring Bootアプリケーションで環境変数を使うには、上記3つの方法があります。それぞれの特徴を理解して、状況に合わせて使い分けてください。
# データベースの接続先
spring.datasource.url=${DB_URL}
# デフォルト値を設定
spring.datasource.username=${DB_USERNAME:default_user}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
class Example {
@Value("${DB_URL}")
private String databaseUrl;
@Value("${DB_USERNAME:default_user}")
private String databaseUsername;
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
class Example {
@Autowired
private Environment environment;
String databaseUrl = environment.getProperty("DB_URL");
String databaseUsername = environment.getProperty("DB_USERNAME", "default_user");
}
実行方法
- 上記のコードを
java
ファイルに保存します。 - 環境変数
DB_URL
とDB_USERNAME
を設定します。 java -jar application.jar
コマンドを実行してアプリケーションを起動します。
確認方法
アプリケーションが起動したら、コンソールログを確認して、環境変数が正しく読み込まれていることを確認します。
...
INFO 2023-12-21 12:34:56.789 Example : Database URL: jdbc:mysql://localhost:3306/mydb
INFO 2023-12-21 12:34:56.790 Example : Database Username: root
...
補足
上記はあくまでもサンプルコードです。実際の環境に合わせてコードを修正する必要があります。
- 環境変数は、OSやシェルによって設定方法が異なります。詳細は、OSやシェルのドキュメントを参照してください。
application.properties
ファイルは、src/main/resources
ディレクトリに配置する必要があります。@SpringBootApplication
アノテーションは、アプリケーションのメインクラスに記述する必要があります。@Component
アノテーションは、環境変数を注入したいクラスに記述する必要があります。Environment
インターフェースは、@Autowired
アノテーションを使って注入する必要があります。
Spring Bootのapplication.propertiesで環境変数を使う他の方法
.env ファイルを使う
.env
ファイルをプロジェクトのルートディレクトリに作成します。.env
ファイルに環境変数を以下の形式で記述します。
DB_URL=jdbc:mysql://localhost:3306/mydb
DB_USERNAME=root
.env
ファイルは、Gitなどのバージョン管理システムで管理しないように注意する必要があります。.env
ファイルのフォーマットは、Spring Bootによって自動的に読み込まれる形式である必要があります。
Spring BootのEnvironmentPostProcessorを使う
- 独自の
EnvironmentPostProcessor
を作成します。 EnvironmentPostProcessor
のpostProcessEnvironment()
メソッドで環境変数を設定します。
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
environment.set("DB_URL", "jdbc:mysql://localhost:3306/mydb");
environment.set("DB_USERNAME", "root");
}
}
Spring BootのCommandLineRunnerを使う
- 独自の
CommandLineRunner
を作成します。 CommandLineRunner
のrun()
メソッドで環境変数を取得して処理します。
public class MyCommandLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("DB_URL: " + System.getenv("DB_URL"));
System.out.println("DB_USERNAME: " + System.getenv("DB_USERNAME"));
}
}
java mysql spring