構成アイテムSpringbootは、設定ファイルが静的定数に割り当てられている読み込み
実用的なアプリケーションは、そのような使用シナリオでは、あなたはグローバル変数を設定する必要があり、一般的なアプローチは、このメソッドの静的メンバ変数定数クラスの欠点は変化に一定の必要がある場合、またはマルチ環境でのことであるとして、グローバル変数の保存、一定のクラスを記述することです(DEV、テスト、PROD)プロジェクトは、異なる環境が異なっている定数この時間は、構成ファイル内の定数を書き込むことができます。ですから、そのような話題が求められています、静的定数を初期化するための設定ファイルの設定項目。
記事のディレクトリ
- 構成アイテムSpringbootは、設定ファイルが静的定数に割り当てられている読み込み
記事のディレクトリ
- 構成アイテムSpringbootは、設定ファイルが静的定数に割り当てられている読み込み
背景
1.コンフィギュレーション・ファイルをロードする方法を決定します
- この様々な負荷プロファイルへの参照、およびspringbootが自動的に起動パラメータに基づいて指定された設定ファイルを見つけてみましょう達成するためにではなく、コンフィギュレーション・ファイルを使用すると、ハードコードされたの名前を指定しますので、指定されたパスを読みます設定項目をロードするために使用@value注釈方法
前記スイッチング手段の異なる環境
- 異なる環境に切り替えるために使用されるコードの正確な同じセットを達成するために、方法を切り替える種々の環境に、この基準は、(むしろ、ライトコードのプロファイル情報より)、本明細書で選択さ起動時のパラメータを設定すると、プロジェクトの開始 --spring.profiles.active = DEV方法コンフィギュレーション・ファイルを決定するために読み取られます
- この記事は、方法を変更するために使用されていないのpom.xml
設定項目の方法で設定ファイルを負荷3
- 本明細書で使用する場合、定数クラスのコンストラクタ内の構成項目をロード
4.ここでは、sprintboot下のコンフィギュレーション・ファイルをロードするためのブートシーケンスの順序を理解する必要があります
1. sprintbootブートシーケンス:上から下へ
- Beanの作成
- 各メンバ変数の割り当てを初期化ビーン、ビーン
2.設定ファイルのロード順序:上から下へ
- application.yml
- application.yaml
- application.properties
ご注意ください:この記事では、同じモジュールの場合の一定のクラスファイルとspringbootプロジェクト開始クラスを実現する、マルチモジュールプロジェクトは、モジュール間の初期化定数クラスを達成するためにどのように、まだ模索する必要があります。
具体的な方法
コンフィギュレーション・ファイルを確認し1.読み込まれます
本論文では、一例としてsprintbootプロジェクトは、プロジェクトの設定ファイルには4つがあります。
- application.properties - メインの設定ファイル
- application-dev.properties - DEV環境プロファイル
- application-test.properties - テスト環境プロファイル
- application-prod.properties - prod環境プロファイル
2.書き込み定数クラス
必要なspringbootプロジェクトが開始すると、自動負荷設定項目は、および静的メンバ変数定数クラスに割り当て
-
- @Componentはクラス定数のクラス宣言に段階的に添加し
-
- 静的メンバ変数を初期化します
-
- コンストラクタを作成します(引数のコンストラクタがある)、プラス法にコメント@Autowired
-
- メソッドパラメータの宣言部に、設定項目の値を取得するために@valueノートを使用し、静的メンバ変数は、クラスに割り当てられました
自動的内のプロジェクトのためのコールを中心に、各設定項目のクラスと始めたプロジェクト内の一定のクラスコンフィギュレーションファイルに割り当てられた静的メンバ変数を初期化します
- 注:この記事は、同じモジュールの場合の一定のクラスファイルとspringbootプロジェクト開始クラスを実現する、マルチモジュールプロジェクトは、モジュール間の初期化定数クラスを達成するためにどのように、まだ模索する必要があります。
例
コードセクション
- application.properties
# Tomcat
server.tomcat.max-threads=1000
server.tomcat.min-spare-threads=30
server.port=8080
# prod|test|dev 该配置项接收启动命令参数
spring.profiles.active=${spring.profiles.active}
- application-dev.properties
# env flag
env.flag=dev
- application-test.properties
# env flag
env.flag=test
- application-prod.properties
# env flag
env.flag=prod
- プロジェクトのスタートアップクラス:DemoProjectApplication
@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;
}
}
結果
startコマンド--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 】