Spring Boot アプリケーション開発をもっと便利に! application.properties で環境変数を活用する方法

2024-04-02

Spring Bootのapplication.propertiesで環境変数を使う

概要

  1. application.properties ファイル内で直接環境変数を参照する
  2. @Value アノテーションを使って環境変数を注入する
  3. Environment インターフェースを使って環境変数を取得する

application.properties ファイル内で直接環境変数を参照する

方法

# 環境変数を参照する
key=${環境変数名}

# デフォルト値を設定することも可能
key=${環境変数名:デフォルト値}

# データベースの接続先
spring.datasource.url=${DB_URL}

# デフォルト値を設定
spring.datasource.username=${DB_USERNAME:default_user}

注意点

  • 環境変数名とプロパティ名は一致させる必要があります。
  • デフォルト値を設定する場合は、: の後に記述します。

@Value アノテーションを使って環境変数を注入する

  1. 環境変数を注入したいフィールドに @Value アノテーションを記述します。
@Value("${環境変数名}")
private String property;
@Value("${DB_URL}")
private String databaseUrl;

@Value("${DB_USERNAME:default_user}")
private String databaseUsername;
  • @Value アノテーションは、@Component アノテーションで管理されているクラスでのみ使用できます。

Environment インターフェースを使って環境変数を取得する

  1. @Autowired アノテーションを使って Environment インターフェースを注入します。
  2. 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");

}

実行方法

  1. 上記のコードを java ファイルに保存します。
  2. 環境変数 DB_URLDB_USERNAME を設定します。
  3. 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 ファイルを使う

  1. .env ファイルをプロジェクトのルートディレクトリに作成します。
  2. .env ファイルに環境変数を以下の形式で記述します。
DB_URL=jdbc:mysql://localhost:3306/mydb
DB_USERNAME=root
  • .env ファイルは、Gitなどのバージョン管理システムで管理しないように注意する必要があります。
  • .env ファイルのフォーマットは、Spring Bootによって自動的に読み込まれる形式である必要があります。

Spring BootのEnvironmentPostProcessorを使う

  1. 独自の EnvironmentPostProcessor を作成します。
  2. EnvironmentPostProcessorpostProcessEnvironment() メソッドで環境変数を設定します。
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を使う

  1. 独自の CommandLineRunner を作成します。
  2. CommandLineRunnerrun() メソッドで環境変数を取得して処理します。
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


【超解説】PDOでデータベース行数を取得する4つの方法とそれぞれのメリット・デメリット

PHPでMySQLデータベースを操作する際、PDO (PHP Data Objects) はよく利用される拡張ライブラリです。PDOを用いると、データベース操作を効率的に行うことができます。本記事では、PDOにおいて行数を取得する方法について、解説します。具体的には、以下の2つの方法を紹介します。...


「Reshape a Table to Convert Rows to Columns」をSQL、MySQL、ピボットテーブルで実現

このチュートリアルでは、SQL、MySQL、ピボットテーブルを使ってテーブルの形状を変更し、行を列に変換する方法について説明します。前提条件SQLとMySQLの基本的な知識ピボットテーブルの概念使用するツールMySQL 8.0MySQL Workbench...


「INSERT IF NOT EXISTS」と「REPLACE INTO」の違い

MySQLでレコードを挿入する際、すでに同じレコードが存在するかどうかを確認してから挿入したい場合があります。このような場合、INSERT IF NOT EXISTSという機能を使用できます。方法INSERT IF NOT EXISTSを使用するには、以下のいずれかの方法を使用できます。...


ALTER TABLE で簡単追加!MySQL に複合主キーを設定する方法とサンプルコード

このガイドでは、既存の MySQL テーブルに複合主キーを追加する方法について、ALTER TABLE ステートメントを用いて詳細に解説します。複合主キーとは、複数の列で構成される主キーであり、レコードを一意に識別するために使用されます。手順...


MySQLのDATETIMEフィールドから日付のみをスマートに抽出:3つのアプローチ

DATE() 関数を使用する説明:DATE() 関数は、DATETIMEフィールドから日付部分のみを抽出します。構文:例:このクエリは、customers テーブルの created_at DATETIMEフィールドから日付部分のみを抽出し、creation_date という名前の新しい列に格納します。結果は次のようになります。...


SQL SQL SQL SQL Amazon で見る



MySQL クライアントライブラリを使ってSQLファイルをインポートする方法

必要なものMySQL サーバーがインストールされていることコマンドラインツールへのアクセスインポートする SQL ファイル手順ターミナルを開きます Windows では、スタートメニューを開き、「コマンドプロンプト」と入力して Enter キーを押します。 Mac では、Spotlight 検索を使用して「ターミナル」を検索し、開きます。