記事のディレクトリ
序文
春ブーツは、あなたのプロジェクトのアップとすぐに実行しているを取得するには(あなたが手動で設定する必要はありませんので、設定は、内蔵の習慣の構成に加えて、多数のプロジェクトが存在する)「の構成上の習慣」の概念を使用して。しかし、いくつかの設定は、春のブートコンフィギュレーションファイルを知っておく必要がある、それを行う方法を私たちの要件を満たしていない場合。
テキスト
デフォルトの設定ファイル
グローバルコンフィギュレーション・ファイル、設定ファイルのサポートのプロパティを使用して、コンフィギュレーションの2種類をYML SpringBoot、コンフィギュレーションファイル名が固定されているapplication.properties/application.yml
いくつかの設定値を変更するために、SPINGブートグローバルコンフィギュレーションファイルの役割は、デフォルトの設定です。
優先順位のプロフィール
開始springbootは、それは次の場所スキャンapplication.properties/application.yml
春のブートデフォルトの設定ファイルとしてファイルを
-
-file:./設定/(プロジェクトのconfigフォルダ)
-
-file:./(直接プロジェクトパスに)
-
-classpath:/ configに/(クラスパスフォルダ設定ファイル)
-
-classpath:/(直接クラスパスに)
高い優先順位の最後に、高優先度の設定は、低い優先順位の設定を上書きします。
SpringBootは、すべての主要な設定ファイルの4箇所からロードされます。補完的な構成 ;
プロファイルのプレースホルダ
1、乱数
{ランダム}プロファイル$、それによってそのようなint型、長い文字列値または文字列を生成するように、トラブルコード生成を単純化し、ランダムな値の様々な異なるタイプのを生成するために使用することができます。
randomtest:
value: ${random.value}
int: ${random.int}
intarr: ${random.int(10)}
long: ${random.long}
longstr: ${random.long(10)}
uuid: ${random.uuid}
無指定されたデフォルト値の場合は2、プレースホルダ値の設定は、以前に取得しました
user:
user-name: 张三${random.uuid}
age: ${random.int}
birth: 2017/12/15
dog:
name=${user.hello:hello}_dog //如果有user.hello,使用前面配置的user.hello的值,没有则使用默认值hello
age=15
カスタム構成ファイルを使用します
時には我々は、我々は使用することができ、内部のすべての構成のapplication.propertiesを入れたくない@PropertySource
指定された設定ファイルをロードするために注釈を
我々は例えば、設定ファイルをカスタマイズすることができますuser.properties
また、下記のsrc /メイン/リソースのパス上を、。
私たちは、コンフィギュレーション・クラスで使用できる@PropertySource
指定されたコメントをロードするためにuser.properties
プロファイルを
@PropertySource(value = {"classpath:user.properties"})
@ConfigurationProperties(prefix = "user")
@Component
@Data
public class User {
private String userName;
private int age;
private Date birthday;
}
注:@PropertySource
注釈はYMLのプロファイルをサポートしていません
外部設定 - コマンドラインパラメータ
春ブーツジャーパッケージは、次のコマンドで直接実行することができ、実行、ラベル瓶パッケージに基づいています。
java -jar xx.jar
次のコマンドでは、Tomcatのポート番号を変更できます。
java -jar xx.jar --server.port=8081
図から分かるように、コマンドラインを引い二つの連続- application.properties属性値が代入で識別されます。
そのためのjava -jar xx.jar --server.port = 8081は、コンフィギュレーション・ファイルはserver.port = 8081に属性を追加することと等価です。
あなたが危険にさらされて、コマンドラインを恐れている場合、あなたはそれを無効にする(偽)SpringApplication.setAddCommandLinePropertiesを使用することができます。
実際には、種々の方法がスプリングブートアプリケーションが提供され、春の起動は、属性のプロパティは、以下を含む複数のソースから得られます。
-
コマンドライン引数、構成のすべての構成の複数のスペースで区切られた、コマンドラインで指定することができる; - = CI値
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
-
JNDIプロパティ:comp / envをJavaから
-
Javaシステムプロパティ(System.getProperties())
-
オペレーティングシステム環境変数
-
ランダムRandomValuePropertySource構成。*プロパティ値
ジャージャーパッケージ内の発信パケットを探して。
優先順位は、プロファイルをロード
-
ジャー外装または用途向け{プロファイル}の.properties application.yml(spring.profile持つ)プロファイル
-
(spring.profile付き)内部ジャーパッケージ用途向け{プロファイル}の.propertiesまたはapplication.ymlプロフィール**
ここでも、プロファイルをロードしません
-
ジャーまたは外装application.propertiesは(spring.profileなし)プロファイルをapplication.yml
-
(spring.profileなし)内部のjarパッケージapplication.propertiesまたはapplication.ymlプロフィール
-
@Configuration上@PropertySourceのクラスのノート
-
SpringApplication.setDefaultProperties指定されたデフォルトプロパティで
すべてのサポートされる構成のロード・ソースは、公式ドキュメントを参照してください。
プロファイル値取得
SpringBoot設定ファイルの値を取得するには、2つの方法があります。
使用@valueコメント
我々はここで設定でいくつかの定数を置くことができるようにプロファイルは、カスタム属性のサポートを提供します。
user:
user-name: 张三
age: 18
birthday: 2000/01/01
そして、直接注釈を通じて代わりに使用することが@Value(value=”${config.name}”)
あなたが望むものの上にプロパティにバインドすることができます
@Component
@Data
public class User{
@Value("${user.user-name}")
private String userName;
@Value("${user.age}")
private int age;
@Value("${user.birthday}")
private Date birthday;
}
テストの実行、取得したユーザの出力
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {
@Autowired
User user;
@Test
public void contextLoads() {
System.out.println(user);
}
}
次のように出力結果があります
ユーザ(ユーザ名=ジョン・ドウ、年齢= 18、誕生日=土1月1日夜12時00分00秒CST 2000)
使用@ConfigurationPropertiesコメント
時には属性が多すぎる、一つはあまりにも疲れて財産上のフィールドにバインドされ、私たちが使用できる@ConfigurationProperties
注釈
ノートの意味は、各プロパティの設定ファイルの値がコンポーネントにマップされている、そのプロパティの接頭辞= " xxxは「すべて1つのマッピングの下にあったプロパティの指定した設定ファイル
注:このコンポーネントは、コンテナ提供するために、コンポーネントの唯一のコンテナである@ConfigurationProperties
機能を、それがクラスの持っている必要があります@Component
注意事項を
私たちが各プロパティを設定する必要はありませんように、@Value
ノート唯一のクラスに設定する必要があり@ConfigurationProperties(prefix = "user")
、自動的にコンフィギュレーションファイルに対応する各属性値にマッピングSpringBoot
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User{
private String userName;
private int age;
private Date birthday;
}
テストの実行、取得したユーザの出力
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {
@Autowired
User user;
@Test
public void contextLoads() {
System.out.println(user);
}
}
次のように出力結果があります
ユーザ(ユーザ名=ジョン・ドウ、年齢= 18、誕生日=土1月1日夜12時00分00秒CST 2000)
@ConfigurationProperties違い@valueと注釈
@ConfigurationProperties | @値 | |
---|---|---|
一括設定 | サポート | サポートしていません。 |
緩く結合(緩い構文) | サポート | サポートしていません。 |
ゲーム | サポートしていません。 | サポート |
JSR303のデータチェック | サポート | サポートしていません。 |
複合型パッケージ | サポート | サポートしていません。 |
- バルク構成は:例えば上記に示したように、
@ConfigurationProperties
バッチ構成ファイル属性に注入することができる、@Value
唯一つの噴射A - ルース構文:
@ConfigurationProperties
サポート緩い構文、ユーザー名を使用して、設定ファイルなどの@ConfigurationProperties
注射userName属性値を与えることができますが、@Value("${user.userName}")
ユーザ名に設定ファイルで割り当てることができませんユーザー名属性 - SPEL言語:
@value
サポートSPEL言語、例えば:
しかし、年齢=#{* 2 11}場合 、 プロファイルは、@Value("#{11*2}") private int age;
@ConfigurationProperties
年齢プロパティに注射の値を計算することは不可能です - JSR303の検証:使用して
@ConfigurationProperties
、データを確認することができ、例えば:@Email private String email;
@ConfigurationProperties
以下のような複雑な封止材を、サポートしていますuser: user-name: 张三 age: 18 birthday: 2000/01/01 map: {1:v1,k2:v2}
@Component @ConfigurationProperties(prefix = "user") @Data public class User{ private String userName; private int age; private Map map; }
@ConfigurationProperties
設定ファイルは、直接マップの属性をマッピングするために割り当てることができます
プロファイル - マルチ環境設定
アプリケーションが異なるオペレーティング環境にデプロイする必要があり、設定は通常は異なるだろう、ロギングなど、最も簡単な場合には、生産のロギングはレベルがWARNレベル以上ログインし、ログファイルに書き込まれたログ、および開発時間ログレベルはDEBUG、ログにコンソールに出力するために必要。あなたは放出プロフィールを交換するたびに、これはあまりにも多くの問題がある場合は、春ブーツのプロフィールは、パラメータを指定してコマンドを取得するには、私たちに2つのソリューションを与えました。
1、マルチファイルのプロフィール
.propertiesファイル/ YMLマスター設定ファイルの準備で私たちは、ファイル名は用途向け{プロファイルは}することができ
、デフォルトapplication.properties
設定は、設定ファイルで使用することができspring.profiles.active= xxx
、使用するプロファイルを指定するために
、我々が使用するたとえばapplication-dev.yml
、この設定ファイルをメインに構成することができます設定ファイル
spring:
profiles:
active: dev
2、YMLサポート複数のブロック方法
YMLを使用することができる---
コードブロックを使用して指定することができる別のコードブロックに
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
また、使用するプロファイル外部起動パラメータを使用することができます
java -jar spring-boot.jar --spring.profiles.active=dev;
または仮想マシンのパラメータを使用します
-Dspring.profiles.active=dev