この記事では、作成した部分であり、マイクロチャネルアプレットにソース、歓迎の注意を示して再現し小白AI博客
たマイクロチャンネル公衆番号小白AI
やWebサイトのxiaobaiai.netや私CSDN blog.csdn.net/freeape
[TOC]
0はじめに
実際のプロジェクトの開発を入力し、私たちは、デフォルトグローバルコンフィギュレーションファイルに頼っていないapplication.properties
私たちのプロジェクトのアップ、春のブートコンフィギュレーションファイルを設定するには、注意を必要とする多くの分野があり、マスター、あなたは簡単に私たちは途中でプロジェクトをやらせることができます様々な構成のエッジは、基準の将来を促進することに加えて、一見、明確な明確な階層モジュール、書かれた要約で構成しましょう。記事の内容、最新のコンフィギュレーションファイルの内容を導入することで、2019年11月21日のように書かれた最新の公式ドキュメントへのすべての参照、春になると5.2.1
、バージョン、春ブーツがある2.2.1
バージョン。
私たちは、理解する必要がある1
Spring Boot
提供spring-boot-devtools
のjarパッケージには、プログラム開発のいくつかの便利な機能を提供し、主な変更点は、監視プログラムであり、その後、自動的に再起動します。使用spring-boot-devtools
する必要がpom.xml
同じ時間に依存関係を追加するには、設定する必要があります。デフォルトでは、唯一のでしょうによって有効になり、プラグインをパッケージ化する際には含まれませんデフォルト。
spring-boot-devtools
开发环境
Spring Boot
spring-boot-devtools
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>复制代码
2はじめとグローバルの概要
作成Spring Boot
後にプロジェクトを、それがされますsrc/main/resources
デフォルトでグローバル・コンフィギュレーション・ファイルのディレクトリを生成しapplication.properties
ますが、どのような何のコンテンツがありません。春ブーツは、すべてのデフォルト設定パラメータが自動的に設定されている(https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html)、我々は外部の構成である場合設定ファイルを変更し、デフォルトの設定パラメータは、(外部化設定、変更される外部化設定を使用すると、プロパティファイルを使用することができますいくつかの方法(プロパティファイル)、YAMLファイル、環境変数、およびコマンドライン引数がある設定を外部化、)コンフィギュレーションを外部、以下の内容を詳細に説明します。
例えば、コンフィギュレーション・ファイルをすることができapplication.properties
いずれかでapplication.yml
、あなただけのだけの設定構文ではない、いくつかのに比べて明確な形式のプロパティに同じ、YMLレベルフォーマット内で、設定することができます。
.properties
執筆:
server.port = 9090
spring.application.name = demoservice复制代码
.yml
執筆:
spring:
application:
name: demoservice
server:
port: 9090复制代码
注:YML形式は、タブを使用してはならないが、タブ、コロンと値の間にスペースを持っている必要があります。
春ブーツは、次のようにここに要約我々は注意を払う必要があるシーケンスを、(カバー)のパラメータを書き換える必要があります:
- とき
Devtools
の時間は、$HOME/.config/spring-boot
グローバルなフォルダセットのプロパティをデベロッパーツール @TestPropertySource
テスト上の注意事項について- テスト
properties
。@SpringBootTest
アプリケーションの特定の部分をテストするためのコメントやテストを提供 - コマンドラインパラメータ
SPRING_APPLICATION_JSON
プロパティ(JSON組み込みシステムや環境変数のプロパティ)のServletConfig
初期化パラメータServletContext
初期化パラメータ- JNDIプロパティ:
java:comp/env
- Javaシステムプロパティ:
System.getProperties()
- オペレーティングシステム環境変数
RandomValuePropertySource
、そのプロパティのみでrandom.*
- パッキン
jar之外
特定のアプリケーションプロファイル属性(例えばapplication-{profile}.properties
、対応する可変YAML)を - パッケージ
在jar中
(例えば、プロファイルに特異的な適用特性をapplication-{profile}.properties
可変YAML) - パッケージ化された
jar之外
アプリケーションのプロパティ(application.properties
および変数YAML) - パッケージ化された
在jar中
アプリケーションのプロパティ(application.properties
および変数YAML) @Configuration
クラス上@PropertySource
の注意事項- (設定して、デフォルトプロパティ
SpringApplication.setDefaultProperties
に指定)
上記順序が有効である方法を説明するための具体的な例として:
import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;
@Component
public class MyBean {
@Value("${name}")
private String name;
// ...
}复制代码
例えば、アプリケーション・クラス・パス(例えば、パッケージング在jar内
上の)が存在してもよいapplication.properties
ファイル、ファイルがname
セットデフォルト属性のプロパティ値。新しい環境での実行は、それができる在jar外部
提供application.properties
カバー上書きしますファイル、在jar内
のをapplication.properties
。別の例では、使い捨てのテストのために、特定のコマンドラインを開始するためにスイッチを使用することができる(例えば、java -jar app.jar --name="Spring"
)覆われていてもよいname
属性値。別の例JSON形式の環境変数をすることができます$ java -Dspring.application.json='{"name":"test"}' -jar myapp.jar
覆われています。それ以外の場合ではない一例ずつ。
3設定パラメータ
そして、オーダーパラメータの設定3.1ディレクトリおよび負荷の優先順位の役割
そこ二つの方法構文、パラメータ、ありproperties
、一つはyml
、SpringApplication
からapplication.properties
ファイルの次の属性の積載位置、およびに追加しますSpring环境
。
- 現在のプロジェクトディレクトリの
config
サブディレクトリ - 現在のプロジェクトのルートディレクトリ
- クラスパス設定されたディレクトリの
config
サブディレクトリ - セットクラスパスディレクトリ
上記のリストは、優先順位でソート(定義された属性を覆う低い位置に定義された属性のリストに高い位置、カバー内の第2の属性集合の属性値と同じ属性値)。
注:Mavenの、src / main / resourcesディレクトリでプロジェクトをビルドする場合は、デフォルトのクラスパスです
また、そのYMLポイントと特別な使用法の下で、ここで注意してください。
- YML形式はタブタブ、コロンと値の間で使用することはできません
一定要有空格
一定要有空格
一定要有空格
- などの特殊文字は、それ自体の特殊文字出力関数内の文字列をエスケープしませんYML二重引用符、
- YMLの特殊文字は、文字列内の元の文字の出力を単一引用符をエスケープします
# 下面会输出得到hello换行xiaobaiai.net
name: "hello\nxiaobaiai.net"
# 下面会输出得到hello\nxiaobaiai.net
name: 'hello\nxiaobaiai.net'复制代码
- YML支持物体、アレイ、スカラー(文字列、ブール真/偽、整数、浮動小数点、ヌル、時間、日付
new Date('1976-07-31')
)
# 对象行内写法
students: { name: Steve, age: 22 }
# 数组行内写法
animal: [Cat, Dog]
# 或者数组非行内写法
animal:
- Cat
- Dog复制代码
値3.2パラメータのランダム設定を生成します
パラメータまたはいくつかのテストシナリオでランダムな値を生成すると便利な設定です。
我々の構成など:
#random int
app.location-x=${random.int}
app.location-y=${random.int}
#random int with max
app.user-age=${random.int(100)}
#random int range
app.max-users=${random.int[1,10000]}
#random long with max
app.refresh-rate-milli=${random.long(1000000)}
#random long range
app.initial-delay-milli=${random.long[100,90000000000000000]}
#random 32 bytes
app.user-password=${random.value}
#random uuid. Uses java.util.UUID.randomUUID()
app.instance-id=${random.uuid}复制代码
最終的な出力:locationX=-449689812, locationY=-2048116572, userAge=88, maxUsers=8927, refreshRateMilli=418859, initialDelayMilli=12542150790115755, userPassword=95ea8b43fd16dc26aad0030c1340e723, instanceId=bd252902-54e9-47b3-bebf-a81b1300ff69
3.3パラメータ参照(プレースホルダ)
:前プレースホルダを参照することによって実現されるパラメータのパラメータ値のような、構成で定義することができます
app.name=MyApp
app.description=${app.name} is a Spring Boot application复制代码
一部の人々が使用するために(たとえば)好きな--port=9000
のではなく、--server.port=9000
コマンドラインで構成プロパティを設定します。application.properties
使用占位符
この動作を有効にするには:
server.port=${port:8080}复制代码
注:あなたが継承した場合
spring-boot-starter-parent
POM、リソースからマーカーをスクリーニングしたプラグインMavenのデフォルト${*}
の変更@
(すなわち、@maven.token@
代わりに${maven.token}
春スタイルプレースホルダとの競合を防ぐために)。直接場合はapplication.properties
Mavenのフィルタリングが有効になって、あなたはまた、代わりに他の区切り文字としてラベルデフォルトのフィルタを変更する必要があります@
。
3.4カスタムプロファイル
3.4.1方法
あなたが好きではない場合はapplication.properties
、プロファイル名として、次のように指定することができspring.config.name
、環境プロパティの別のファイル名にスイッチを。また、使用することができるspring.config.location
場所のプロファイルを指定するには、環境属性(パスのファイルまたはディレクトリの場所をコンマで区切ったリストを)。別のファイル名を指定する方法を次の例が示します:
$ java -jar myproject.jar --spring.config.name=myConfig复制代码
二つの位置を指定する方法を次の例が示します:
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties复制代码
場合spring.config.location
(ファイルではなく)ディレクトリ、あなたがする必要が/
終了し、ランニング、コンフィギュレーションをロードする前に、あなたはに添付しなければならないspring.config.name
設定の名前またはデフォルトの設定名。デフォルトの設定ではありませんspring.config.location
、設定ファイルの検索順序:
file:./config/
file:./
classpath:/config/
classpath:/复制代码
カスタム配置位置を使用して構成されspring.config.location
、彼らは、デフォルトの位置を交換します。例えば、場合spring.config.location
設定の値classpath:/custom-config/,file:./custom-config/
、検索順序は次のようになります。
file:./custom-config/
classpath:custom-config/复制代码
カスタム設定が位置を配置した場合spring.config.additional-location
、追加の設定パスに加えて、デフォルトの場所を使用します。デフォルトの位置の前に他の場所を検索します。
注:プログラミング環境では、spring.config.nameは、実際にのみ、コマンドラインまたはセット環境変数ないapplication.propertiesに直接提供される
export SPRING_CONFIG_NAME=myConfig
か、または指定されたパスにコード手動でインポート構成ファイルにデコーディングされました。
3.4.2第二の方法
このセクションで後述するカスタムプロパティと、このように、実際には、達成するための設定ファイルをロードし、直接コーディングすることにより、指定された同じ、唯一のより指定されたファイル名のコメントよりも、より詳細には、操作の後ろに見ることができます。例えば、我々は作成test.properties
してパス上にも、src/main/resources
以下:
my.app.name=hello
my.app.func=test复制代码
その後、新しいパラメータ豆を作成します。
@Configuration
@ConfigurationProperties(prefix="my.app")
@PropertySource("classpath:test.properties")
public class ConfigTestBean {
private String name;
private String func;
// 省略getter和setter
}复制代码
[OK]をので、どのように検証は、カスタム設定パラメータのセクションを参照してくださいすることができています。
3.5コマンドラインの設定パラメータ
デフォルトでは、SpringApplication
すべてのコマンドラインオプションパラメータ(すなわち--
例えば、起動パラメータ--server.port=9000
)プロパティに、およびに追加しますSpring环境
。第四の属性するためにコマンドラインは、上述したように、その優先順位は常にソースプロパティの下にあります。
あなたは春のコマンドラインに属性にしたくない場合环境
は、プログラムを使用することができSpringApplication.setAddCommandLineProperties(false)
、それらを無効にします。
3.6プロパティ固有の設定ファイル(活性化プロファイル)
加えてapplication.properties
、文書、次の命名規則は、特定の特性プロファイルを定義するために使用することができます:application-{profile}.properties
。環境は、活性プロファイルが、デフォルト設定されていない場合、デフォルトのコンフィギュレーションファイル(デフォルトのデフォルトのプロファイル、即ちapplication-default.properties)のセットを持つapplication-default.properties
のファイル、またはローディング順位と優先application.properties
同じ。Spring
これは、コンフィギュレーションを含むビーン、依存性、ロード、異なる環境プロファイル決意プログラムで実装することができるSpring
DEV(開発)、テスト(単体テスト)、QA(統合テスト)のProd(本番環境)を含むプロファイルの一般的な項目を。同様に、Mavenの、プロファイル設定が設定依存、行動を含む、異なったプロファイル環境のビルドプロセス中に異なる動作を実行することができ、各プロファイルが提供されてもよい。ID(一意の識別子)、プロパティ(設定プロパティ)活性化(論理状態が自動的にトリガ)、依存関係(依存性)等が挙げられます。
ここでは、どのようにプロファイルをアクティブにしますか?ここでは3つの方法があります。
注:用途向け{プロファイル}の.propertiesリライト優先順位は、この構成ファイルを使用して、application.propertiesよりも大きい
加载顺序
問題ではありません。また、同じ特性を有する用途向け{プロファイル} .ymlファイルを作成します。
3.6.1方法
構成ファイルの設定で、このアプローチは柔軟ではない、以下実際の開発が使用されます
spring.profiles.active=test复制代码
3.6.2第二の方法
例Mavenの中に包装する際置換プレースホルダ
最初のステップ(package.targetカスタムパラメータ)のプロパティを追加します。
[email protected]@复制代码
第二段階の異なる環境の増加はのpom.xmlに設定を詰め:
<!-- 与Maven build标记并列 -->
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<package.target>dev</package.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</dependency>
</dependencies>
</profile>
<!-- 生产环境 -->
<profile>
<id>prod</id>
<properties>
<package.target>prod</package.target>
</properties>
</profile>
</profiles>复制代码
上記構成から分かるように、Mavenのは、二つのプロファイル構成:DEV及びPROD、ノーPROD一方(このような製造環境で、使用の開発を外部のTomcatの構成シナリオを使用するなど、埋め込みDEVのTomcatで使用します内部のTomcat)。
第三のステップは、「@ XXX @」、建物内のリソースのMavenプラグインの使用を表現するフィルタのプロパティを変更達成するためにリソースを追加します。
...
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- Maven build标记内 -->
<resources>
<!-- 不加该resource也可以 -->
<resource>
<directory>src/main/resources</directory>
<excludes>
<!-- 排除掉src/main/resources下的所有application*.properties文件 -->
<exclude>application*.properties</exclude>
</excludes>
</resource>
<resource>
<!-- 指定要处理的资源目录 -->
<directory>src/main/resources</directory>
<!-- 是否替换@xx@表示的maven properties属性值 -->
<filtering>true</filtering>
<includes>
<!-- 将文件内容的“@xx@”替换为相应的变量,即package.target -->
<include>application-${package.target}.properties</include>
</includes>
</resource>
</resources>复制代码
第四の工程は、パッケージをコンパイルすることです:
# 根据Maven Profile的 dev 构建环境包
$ mvn clean package -Dmaven.test.skip=true -Pdev复制代码
3.6.3 3つの方法
システム環境変数を設定することにより:
export SPRING_PROFILES_ACTIVE=dev复制代码
3.6.4その他の方法
Javaのコマンドラインモードの設定:
# 方式一
$ java -jar app.jar --spring.profiles.active=dev
# 方式二
$ java -jar -Dspring.profiles.active=dev demo-0.0.1-SNAPSHOT.jar复制代码
注釈方法(@ActiveProfiles
単体テストに設けられたコメント春ブーツのテストスタータのみでより有用である/src/test/java
使用)。
@ActiveProfiles("dev")复制代码
3.6.5 YML特別な方法
YAMLファイルが実際にあることができる---
ドキュメントの一連の別個の線、各ドキュメントは別個に拡張された構成にマッピング解析されます。DEVまたは生産は、環境変数やクラスのコマンドラインモードが指定されているのと同じ方法を作動させます。
# 通用属性
server:
port: 9000
---
# dev环境下配置
spring:
profiles: dev
server:
port: 9001
---
# production生产环境下配置
spring:
profiles: production
server:
port: 0复制代码
3.7カスタム属性
Spring
すでに私たちのためにデフォルトパラメータの多くを提供していますが、我々はまた、独自の設定パラメータを作成することができます。たとえば、我々はapplication.properties
次のカスタムプロパティを作成しました:
#random int
app.location-x=${random.int}
app.location-y=${random.int}
#random int with max
app.user-age=${random.int(100)}
#random int range
app.max-users=${random.int[1,10000]}
#random long with max
app.refresh-rate-milli=${random.long(1000000)}
#random long range
app.initial-delay-milli=${random.long[100,90000000000000000]}
#random 32 bytes
app.user-password=${random.value}
#random uuid. Uses java.util.UUID.randomUUID()
app.instance-id=${random.uuid}复制代码
そして、対応するJavaパラメータコンポーネントを作成しますMyAppProperties.java
:
@Component
@ConfigurationProperties("app")
public class MyAppProperties {
private int locationX;
private int locationY;
private int userAge;
private int maxUsers;
private long refreshRateMilli;
private long initialDelayMilli;
private String userPassword;
private UUID instanceId;
public int getLocationX() {
return locationX;
}
public void setLocationX(int locationX) {
this.locationX = locationX;
}
public int getLocationY() {
return locationY;
}
public void setLocationY(int locationY) {
this.locationY = locationY;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public int getMaxUsers() {
return maxUsers;
}
public void setMaxUsers(int maxUsers) {
this.maxUsers = maxUsers;
}
public long getRefreshRateMilli() {
return refreshRateMilli;
}
public void setRefreshRateMilli(long refreshRateMilli) {
this.refreshRateMilli = refreshRateMilli;
}
public long getInitialDelayMilli() {
return initialDelayMilli;
}
public void setInitialDelayMilli(long initialDelayMilli) {
this.initialDelayMilli = initialDelayMilli;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
public UUID getInstanceId() {
return instanceId;
}
public void setInstanceId(UUID instanceId) {
this.instanceId = instanceId;
}
@Override
public String toString() {
return "MyAppProperties [locationX=" + locationX + ", locationY=" + locationY + ", userAge=" + userAge
+ ", maxUsers=" + maxUsers + ", refreshRateMilli=" + refreshRateMilli + ", initialDelayMilli="
+ initialDelayMilli + ", userPassword=" + userPassword + ", instanceId=" + instanceId + "]";
}
}复制代码
@ConfigurationProperties
メモSpring Boot
すべての属性と設定ファイルをバインドするには、関連する構成のクラスを宣言します。prefix = "app"
(prefix=可省略
):設定接頭辞書、接頭辞マッピングのすべての属性。@Component
または@Configuration
:に追加の成分Spring Boot
容器は、唯一の容器アセンブリコンポーネントは有効にするように構成されています。
ヒント:あなたがまたできる
@Value("${key}")
設定ファイルの属性を読み取る、key = properties
ファイルの主要部分は、等号の左側。我々はパラメータを定義するJavaコンポーネントでは、あなたはまた、注射が有効な電子メールアドレスがスローされますされていない場合@emailは、メッセージ変数に追加など、特定のパラメータの主張に注釈を付けることができます。このような注釈も@AssertFalse
偽、チェック@AssertTrue
パリティ真、@DecimalMax(value=10,inclusive=true)
以下、10に等しい包括=真を、ほぼ等しいよりも@DecimalMin(value=,inclusive=)
、@Max(value=)
より小さいまたは等しい値、@Min(value=)
より大きいか等しい値、@Past
検査日、@Pattern(regex=,flag=)
正規@Validate
のpoエンティティクラスのように検証します。
最後に、私たちは頼りに参加する必要がありspring-boot-configuration-processor
:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 加入spring-boot-configuration-processor -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>复制代码
私たちのカスタム設定を確認します。
@SpringBootApplication
public class Test07HelloworldApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Test07HelloworldApplication.class, args);
MyAppProperties bean = context.getBean(MyAppProperties.class);
System.out.println(bean.toString());
}
}
// output
// MyAppProperties [locationX=1329054364, locationY=1100464591, userAge=99, maxUsers=8007, refreshRateMilli=733281, initialDelayMilli=54489880705550952, userPassword=76aebd15270f7065adf3d31b5a790829, instanceId=681ed3a4-a561-460c-b826-58229c31b055]复制代码
4まとめ
デモ検証上記の実際の内容の最も後、サンプルコードがあってもよいgithub.com/yicm/Spring ...に見出しました。この章では、構成ファイルの詳細内容の詳細が、私たちは、私は、この要約のようなものだったいくつかのポイントがあります。
- 春ブーツは、デフォルトの設定の多くを提供してくれ、私たちは、設定パラメータのため、これらの値をオーバーライドし、(カバレッジ)を書き換えるためのさまざまな方法を提供し、書き換えモードの間での優先順位であることができます
- スプリングブートアプリケーションは、異なる位置に設定ファイルをロードすることができる
application.properties(yml)
し、これらの位置は、優先度の順であります - それは春ブーツの間のパラメータのプレースホルダで参照することができ、また、コマンドラインパラメータ名によって簡素化することができるプレースホルダ
- 春ブーツは、カスタムパラメータをサポートすることができます
- 春のブートは、カスタム設定ファイル名をサポートしています
- 春のブートコンフィギュレーションスイッチは、することにより、複数のファイルをサポートすることができます
application-{profile}.properties(yml)
プロファイルを活性化し、アクティブプロファイルにはいくつかの方法があります
あなたは上記の概要の具体的な内容を知っている場合は、このブログでは、あなたはほとんど理解する必要があります。
5つの参考文献
- https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html
- https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-yaml
- https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
- https://docs.spring.io/spring-boot/docs/2.2.1.RELEASE/api//org/springframework/boot/SpringApplication.html
- https://docs.spring.io/spring/docs/5.2.1.RELEASE/javadoc-api/org/springframework/test/context/TestPropertySource.html
- https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing-spring-boot-applications-testing-autoconfigured-tests
- http://www.ruanyifeng.com/blog/2016/07/yaml.html
- https://yaml.org/spec/1.2/spec.html
- https://segmentfault.com/a/1190000011770028
この記事では、一部作成され、ソースを示して再現し、歓迎の注意CSDNのfreeapeやマイクロ文字のアプレット小白AI博客
マイクロチャネル公共番号小白AI
やWebサイトxiaobaiai.net