【実践済み】Springboot読み出しプロファイルのコンフィギュレーション・アイテムを静的定数に割り当てる
6206 ワード
Springboot読み出しプロファイルのコンフィギュレーション・アイテムを静的定数に割り当てる
実際の応用では、グローバル変数を設定する必要があるシーンがあります.一般的な方法は、定数クラスを書き、グローバル変数を定数クラスの静的メンバー変数として保存することです.この方法の欠点は、定数を変更する必要がある場合や、マルチ環境(dev、test、prod)プロジェクトで環境によって定数が異なる場合です.この場合、この定数はプロファイルに書くことができます.これにより,問題のようにコンフィギュレーションファイル内のコンフィギュレーション項目を静的定数に初期化する必要がある.
文書ディレクトリ Springboot読み出しプロファイルのコンフィギュレーション・アイテムは、静的定数 に割り当てられます. @[toc] 背景紹介 1. ロードするプロファイルの決定方法 2. 異なる環境の切り替え方式 3. プロファイル内のコンフィギュレーションアイテムをロードする方法 4. ここではsprintbootの起動順序とプロファイルのロード順序 について説明する必要があります. 1. sprintbootの起動順序:上から下まで 2. プロファイルのロード順序:上から下へ ==注意=:本稿では、定数クラスファイルとspringbootプロジェクト起動クラスが同じmoduleである場合にのみ実現し、マルチmoduleプロジェクトでは、moduleにまたがって定数クラスを初期化する方法については、まだ探求する必要があります. 具体的な方法 1. 読み込むプロファイル を決定する. 2. 定数クラス の記述例 コード部 実行結果 背景紹介
1.ロードするプロファイルの決定方法本明細書では、各種のプロファイルのロード方法を参照し、springbootが起動パラメータに基づいて指定されたプロファイルを自動的に見つけることを実現するために、指定されたパスの下で指定された名前のプロファイルをハードコーディングで読み取るのではなく、@Value注釈を使用してプロファイル をロードする.
2.異なる環境の切り替え方式本明細書では、様々な環境の切り替え方法を参照し、完全に同じコードセットを使用して異なる環境を切り替える(コードにプロファイル情報を書くのではなく)ことを実現するために、本明細書では、プロジェクトの起動時に起動パラメータ--spring.profiles.active=devを設定する方法を選択して、読み出すプロファイル を決定する.本明細書では修正pomは使用する.xml方式 3.プロファイル内の構成項目をロードする方法本明細書では、定数クラスのコンストラクタに構成項目 をロードするために使用する.
4.ここではsprintbootの起動順序とプロファイルのロード順序について説明する必要があります.
1.sprintbootの起動順序:上から下へ
Bean を作成 Beanを初期化し、Beanの各メンバー変数に を割り当てる.
2.プロファイルのロード順序:上から下へ application.yml application.yaml application.properties
注意:本稿では、定数クラスファイルとspringbootプロジェクト起動クラスが同じmoduleの場合にのみ実現します.マルチmoduleプロジェクトでは、moduleにまたがって定数クラスを初期化する方法については、まだ探求する必要があります.
具体的な方法
1.読み込むプロファイルの決定
この文書では、sprintbootプロジェクトを例に挙げます.このプロジェクトのプロファイルは4つあります. application.properties–プライマリプロファイル アプリケーション-dev.properties–dev環境のプロファイル application-test.properties–test環境のプロファイル アプリケーション-prod.properties–prod環境のプロファイル 2.定数クラスの作成
springbootプロジェクトの起動を要求すると、構成項目が自動的にロードされ、定数クラスの静的メンバー変数に値が割り当てられます. 定数クラスのclass宣言に逐次@Component を追加
静的メンバー変数 を初期化
コンストラクションメソッドを作成し、メソッドに注記@Autowired を追加します.
メソッド宣言のパラメータセクションで、クラスの静的メンバー変数 に付与する構成アイテムの値を取得するために@Value注記を使用します.
プロジェクトが開始されると、定数クラスが自動的に初期化され、プロジェクト内のあちこちで呼び出されるように、プロファイル内の各構成項目がクラスの静的メンバー変数に割り当てられます.注意:本稿では、定数クラスファイルとspringbootプロジェクト起動クラスが同じmoduleである場合にのみ実現し、マルチmoduleプロジェクトでは、moduleにまたがって定数クラスを初期化する方法については、まだ探求が必要である.
例
コードセクション application.properties application-dev.properties application-test.properties application-prod.properties プロジェクト起動クラス:DemoProjectApplication 定数クラス:Constant
実行結果
起動コマンド--spring.profiles.Active=devを例に挙げます.
実際の応用では、グローバル変数を設定する必要があるシーンがあります.一般的な方法は、定数クラスを書き、グローバル変数を定数クラスの静的メンバー変数として保存することです.この方法の欠点は、定数を変更する必要がある場合や、マルチ環境(dev、test、prod)プロジェクトで環境によって定数が異なる場合です.この場合、この定数はプロファイルに書くことができます.これにより,問題のようにコンフィギュレーションファイル内のコンフィギュレーション項目を静的定数に初期化する必要がある.
文書ディレクトリ
1.ロードするプロファイルの決定方法
2.異なる環境の切り替え方式
4.ここではsprintbootの起動順序とプロファイルのロード順序について説明する必要があります.
1.sprintbootの起動順序:上から下へ
2.プロファイルのロード順序:上から下へ
注意:本稿では、定数クラスファイルとspringbootプロジェクト起動クラスが同じmoduleの場合にのみ実現します.マルチmoduleプロジェクトでは、moduleにまたがって定数クラスを初期化する方法については、まだ探求する必要があります.
具体的な方法
1.読み込むプロファイルの決定
この文書では、sprintbootプロジェクトを例に挙げます.このプロジェクトのプロファイルは4つあります.
springbootプロジェクトの起動を要求すると、構成項目が自動的にロードされ、定数クラスの静的メンバー変数に値が割り当てられます.
プロジェクトが開始されると、定数クラスが自動的に初期化され、プロジェクト内のあちこちで呼び出されるように、プロファイル内の各構成項目がクラスの静的メンバー変数に割り当てられます.
例
コードセクション
# Tomcat
server.tomcat.max-threads=1000
server.tomcat.min-spare-threads=30
server.port=8080
# prod|test|dev
spring.profiles.active=${spring.profiles.active}
# env flag
env.flag=dev
# env flag
env.flag=test
# env flag
env.flag=prod
@SpringBootApplication
public class AdRestApplication {
public static void main(String[] args) {
SpringApplication.run(AdRestApplication.class, args);
System.out.println("Current env :【 " + Constant.env + " 】 ");
}
}
@Component
public class Constant {
public static String env;
@Autowired
private Constant(@Value("${spring.profiles.active}") String env,
@Value("${ldap.url}") String ldapUrl) {
Constant.env = env;
}
}
実行結果
起動コマンド--spring.profiles.Active=devを例に挙げます.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.4.RELEASE)
2020-03-15 16:45:38.075 [main] INFO com.xyy.ops.ad.rest.AdRestApplication - Starting AdRestApplication on arthas with PID 9272 (D:\Java_Project\ad-interface\ad-rest\target\classes started by c8 in D:\Java_Project\ad-interface)
2020-03-15 16:45:38.077 [main] INFO com.xyy.ops.ad.rest.AdRestApplication - The following profiles are active: dev
2020-03-15 16:45:39.082 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 55070 (http)
2020-03-15 16:45:39.089 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-55070"]
2020-03-15 16:45:39.090 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
2020-03-15 16:45:39.090 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.30]
2020-03-15 16:45:39.202 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2020-03-15 16:45:39.202 [main] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1067 ms
2020-03-15 16:45:39.673 [main] INFO o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Initializing ExecutorService 'applicationTaskExecutor'
2020-03-15 16:45:39.728 [main] INFO o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: class path resource [static/index.html]
2020-03-15 16:45:39.837 [main] INFO o.s.ldap.core.support.AbstractContextSource - Property 'userDn' not set - anonymous context will be used for read-write operations
2020-03-15 16:45:39.889 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-55070"]
2020-03-15 16:45:39.911 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 55070 (http) with context path ''
2020-03-15 16:45:39.914 [main] INFO com.xyy.ops.ad.rest.AdRestApplication - Started AdRestApplication in 2.24 seconds (JVM running for 3.03)
Current env :【 dev 】