2026年5月31日日曜日

SpringBoot で環境ごとに設定を変える方法

SpringBoot で環境ごとに設定を変える方法

概要

SpringBoot にはデフォルトで環境ごとに設定を出し分ける機能があるのでそれを使うのが一番簡単です
--spring.profiles.active オプションを使います

環境

  • macOS 26.4.1
  • openjdk 26.0.1
  • SpringBoot 4.0.6
  • gradle 9.5.1
  • VSCode 1.121.0
  • MySQL 9.6.0

src/main/resources/application.properties

spring.application.name=demo
# update はアプリケーション起動時に、Entityに対応するテーブルがなければ作成します
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=

src/main/resources/application-dev.properties

spring.application.name=demo
# update はアプリケーション起動時に、Entityに対応するテーブルがなければ作成します
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/mydatabase_dev
spring.datasource.username=root
spring.datasource.password=

build や bootRun 時にオプションを付与する

上を使う場合には

  • ./gradlew build
  • ./gradlew bootRun

下を使う場合には

  • ./gradlew build
  • java -jar build/libs/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
  • ./gradlew bootRun --args='--spring.profiles.active=dev'

という感じで出し分けることができます

環境変数でもいける

  • SPRING_PROFILES_ACTIVE=dev ./gradlew bootRun

build 時の -P オプションでもいける

ただこれの場合は工夫が必要です
build.gradle で -P オプションで指定された引数の値を受け取り出し分けます

  • vim build.gradle
def env = project.findProperty("env") ?: "dev"

tasks.withType(JavaExec) {
    systemProperty "spring.profiles.active", env
}
  • ./gradlew build -Penv=dev

おまけ: ログにansiカラーを入れる場合

  • ./gradlew bootRun --args='--spring.profiles.active=dev --spring.output.ansi.enabled=always'

最後に

基本は spring.profiles.active オプションを使うのが良いと思います

参考サイト

0 件のコメント:

コメントを投稿