|
Springプロファイルを使う
Spring Bootアプリケーションの動作を環境によって切り替えたいことがあります。
例えば小規模なアプリケーションであっても、最低限
の二つは切り替えることが多いと思います。また環境というのは、
- ローカルPC上のSTSで開発し、STS上で動作確認やデバッグをしているとき
- 開発環境(VM)に配備するとき
- 本番環境(VM)に配備するとき
- Dockerコンテナイメージにして動かすとき
などがあると思います。
ここでは、次のように「3つの環境×2つの設定ファイル」を切り替える例で説明します。
PC上で動かすとき
- application-local.properties
- logback-spring-local.properties
サーバ上で起動可能Jar(Tomcat内蔵Jar)として動かすとき
- application.properties
- logback-spring.properties
Dockerコンテナイメージで動かすとき
- application-container.properties
- logback-spring-container.properties
なお後述の手順の通り、2つのファイルで「local」とか「container」
の部分はそろえる必要は全くありません。ただ分かりやすさ優先です。
[1] 設定ファイルの作成
application-local.properties
spring.datasource.url=jdbc:***(ローカルPCから接続するDBのURL)
logging.config=classpath:logback-spring-local.xml
(他は略)
|
logback-spring-local.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
(他は略)
<appender name="APPLICATION_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>C:/temp/testapp01.log</file>
<encoder>
<pattern>%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %-50logger{40} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>C:/temp/testapp01-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>10MB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
</configuration>
|
application.properties
spring.datasource.url=jdbc:***(サーバーから接続するDBのURL)
logging.config=classpath:logback-spring.xml
(他は略)
|
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
(他は略)
<appender name="APPLICATION_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.home}/app/log/testapp01.log</file>
<encoder>
<pattern>%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %-50logger{40} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${user.home}/app/log/testapp01-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>10MB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
</configuration>
|
application-container.properties
spring.datasource.url=jdbc:***(コンテナから接続するDBのURL)
logging.config=classpath:logback-spring-container.xml
(他は略)
|
logback-spring-container.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
(他は略)
<appender name="APPLICATION_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/opt/app/log/testapp01.log</file>
<encoder>
<pattern>%d{yyyy/MM/dd HH:mm:ss} [%thread] %-5level %-50logger{40} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/opt/app/log/testapp01-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>1MB</maxFileSize>
<maxHistory>10</maxHistory>
<totalSizeCap>10MB</totalSizeCap>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
</rollingPolicy>
</appender>
</configuration>
|
[2] STSローカル実行の設定
STSの実行アイコン>の右側の▼を押す⇒Run Configurations...で
「Spring Boot App - {アプリケーション名(プロジェクト名)}」を選択し、VM Arguments欄に以下を入力します。
-Dspring.profiles.active=local
|
これでSpring Boot Applicationを起動すると「local」プロファイルが有効になるため、
自動的に設定ファイルとして application-local.properties が読み込まれ、
その中に記述している logback-spring-local.xml が読み込まれます。
[3] サーバー配備用Jarのビルドと実行
Maven Buildは普通にやればOKです。targetディレクトリに作られるjarファイルを
SFTPツールなどでサーバーにアップロードします。
java /the/path/of/testapp-0.0.1-SNAPSHOT.jar
|
オプションを何もつけなければ、デフォルトの設定ファイル application.propertiesが読み込まれ、
その中に記述している logback-spring.xml が読み込まれます。
[4] Dockerコンテナイメージの作成
サーバー用のJarと同じものをコンテナ作成環境(PCなのかサーバーと同じ実機なのか)に持ってきて、
同じディレクトリにDockerfileを次のように作成します。
FROM eclipse-temurin:21
ENV INSTBASE=/opt/app
RUN mkdir ${INSTBASE} ${INSTBASE}/app ${INSTBASE}/database ${INSTBASE}/log
COPY ./testapp01-0.0.1-SNAPSHOT.jar ${INSTBASE}/app/.
EXPOSE 8090
CMD ["java", "-jar", "/opt/app/testapp01-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=container"]
|
で、
podman build -t testapp01 .
podman run -it -p 8090:8090 --rm testapp01
|
で起動すると、CMDの末尾の部分のオプションによって containerプロファイルが有効になるため、
自動的に設定ファイルとして application-container.propertiesが読み込まれ、
その中に記述している logback-spring-container.xml が読み込まれます。

(first uploaded 2024/08/12 last updated 2024/08/12, URANO398)
|