ホームページ >Java >&#&チュートリアル >SpringBoot の外部化を構成する方法
Spring Boot を使用すると、構成を外部化できるため、異なる環境で同じアプリケーション コードを使用できます。 Java プロパティ ファイル、YAML ファイル、環境変数、コマンド ライン パラメータなど、さまざまな外部構成ソースを使用できます。
プロパティ値は、@Value アノテーションを使用して Bean に直接挿入したり、Spring の環境を介してアクセスしたり、@ConfigurationProperties を介してオブジェクトにバインドしたりできます。同時に、Spring Boot は、ユーザーが適切なシナリオで特定のプロパティ値をオーバーライドできるようにする非常に特別な PropertyOrder も提供します。この順序は、値の合理的なオーバーライドを可能にするように設計されています。
優先度は次の順序で低から高になります。後者のプロパティ値は前者をオーバーライドします。すべての構成は補完的な構成を形成します:
Default プロパティ (SpringApplication.setDefaultProperties を使用して指定)
@Configuration
クラスの @PropertySource
アノテーションによって導入された構成プロパティ
このようなプロパティ ソースは、次の時点まで更新されないことに注意してください。 ApplicationContext
が環境に追加されます。これでは、フラッシュが開始される前に読み取られた logging.*
や spring.main.*
などの一部のプロパティを構成するには遅すぎます。
構成データ (application.properties ファイルなど)
random.*
形式のプロパティの場合、最初に RandomValuePropertySource
から取得されます。 (優先順位を参照)
OS 環境変数((オペレーティング システム環境変数)
Java システム プロパティ(Java システム プロパティSystem.getProperties()
)
JNDI プロパティ
ServletContext の初期化パラメータ
ServletConfig の初期化パラメータ
SPRING_APPLICATION_JSON プロパティ
コマンド ライン パラメータ
properties プロパティテスト モジュールの下
テスト モジュールの下の @TestPropertySource アノテーションによって導入された構成ファイル
devtools が有効な場合の $HOME/.config/spring-boot パスの下の構成
構成データ ファイルは次のようにロードされます。 考慮すべきシーケンス:
jar にパッケージ化されたアプリケーション プロパティ (application.properties および YAML)
jar にパッケージ化された特定の構成ファイル アプリケーション プロパティ (application-{profile}.properties および YAML)
パッケージ化された jar の外にあるアプリケーション プロパティ (application.properties および YAML)
/{application}.yml /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties構成ファイルのロード シーケンスSpring Boot が開始すると、JAR パッケージ内の指定された場所に構成ファイル (プロパティ) が自動的にロードされます。 JAR パッケージが配置されているディレクトリ内の場所 (ファイル、YAML ファイル)。リストは優先度によって並べ替えられます (下位の項目の値は、前の項目の値をオーバーライドします) classpath ( –classpath ) classpath root path /configクラスパスの下 パッケージ現在のディレクトリ (–file)現在のディレクトリの下現在のディレクトリの下の config/ サブディレクトリconfig/ サブディレクトリ現在のディレクトリの下 ディレクトリの直接のサブディレクトリ
. project-sample ├── config │ ├── application.yml (4) │ └── src/main/resources | │ ├── application.yml (1) | │ └── config | | │ ├── application.yml (2) ├── application.yml (3)起動時の設定ファイルのロード順序: 1 > 2 > 3 > 4プロファイル設定カバレッジの変更 (2.4.0 以降)
2.4.0以前のバージョンのデフォルトの読み込み順序は次のとおりでした:
application.properties 構成ファイルは、JAR パッケージ内の「プロファイル」ベースの
アプリケーションを上書きしませんでした。 構成ファイル。
2.4.0以降のバージョンでは、デフォルトの検索順序は次のとおりです。JAR パッケージ外部のアプリケーション パラメータが、JAR パッケージ内部の特定のアクティベーション構成パラメータよりも優先されるようにします。
打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML)
注意:同一位置下,Properties 文件优先级高于 YAML 文件 , 如果Spring Boot在优先级更高的位置找到了配置,那么它就会无视优先级低的配置。
从 Spring Boot 2.4 开始,加载 Properties 和 YAML 文件时候会遵循, 在文档中声明排序靠前的属性将被靠后的属性覆盖 。
命令行激活: --spring.profiles.active=prod
spring: profiles: active: dev #激活开发环境配置
配置文件激活如上,只需要在application.yml或者properties文件中配置即可
注意:在application.yml或者properties文件存在的情况下,不管激活的是prod还是dev,还是会读取默认的配置文件,只不过指定的配置文件会覆盖默认配置文件中的属性
可以使用spring.config.import
属性从其他地方导入更多的配置数据,比如spring.config.import=my.yaml
。它会将 my.yaml 文件作为临时文件放在当前配置文件之后处理,因此其属性具有更高的优先级
在运行Jar
包的命令中加入这个参数就可以指定Jar
包以外的配置文件的位置了,也可以在application的配置文件中配置该属性
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
这个参数就是指定外部application.yml
配置文件位置的参数,它支持classpath
和file
路径
java -jar myproject.jar --spring.config.name=myproject
如果您不喜欢application.properties
作为配置文件名,您可以通过指定spring.config.name
环境属性来切换到另一个文件名
对于spring.config.location
、spring.config.additional-location
和spring.config.import
等属性的路径,添加optional:
前缀,则当对应文件不存在时应用仍可以正常启动
比如spring.config.location=optional:file:/my.yaml
,当应用启动加载文件 my.yaml 不存在时,不会抛出异常
例如,如果想要获取当前应用程序的名称并作为一个配置项进行管理,那么很简单,我们直接通过 ${spring.application.name} 占位符:
myapplication.name : ${spring.application.name}
假设我们使用 Maven 来构建应用程序,那么可以按如下所示的配置项来动态获取与系统构建过程相关的信息:
info: app: encoding: @project.build.sourceEncoding@ java: source: @java.version@ target: @java.version@ # 等同于下述效果 info: app: encoding: UTF-8 java: source: 1.8.0_31 target: 1.8.0_31
additional-spring-configuration-metadata.json
、spring-configuration-metadata.json
在springboot-starter官方项目或第三方starter项目中随处可见,那它起的作用是什么?
配置additional-spring-configuration-metadata.json
文件后,在开发人员的IDE工具使用个人编写的配置读取很有效的在application.properties
或application.yml
文件下完成提示
在Maven中,该依赖关系应被声明为可选的,如以下例子所示。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
在resources/META-INF
目录下创建additional-spring-configuration-metadata.json
,分类为 “groups” 或 “properties”,附加值提示分类为 "hints",如以下例子所示:
{ "groups": [ { "name": "server", "type": "org.springframework.boot.autoconfigure.web.ServerProperties", "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties" }, { "name": "spring.jpa.hibernate", "type": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate", "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties", "sourceMethod": "getHibernate()" } ... ], "properties": [ { "name": "server.port", "type": "java.lang.Integer", "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties" }, { "name": "server.address", "type": "java.net.InetAddress", "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties" }, { "name": "spring.jpa.hibernate.ddl-auto", "type": "java.lang.String", "description": "DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" property.", "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate" } ... ], "hints": [ { "name": "spring.jpa.hibernate.ddl-auto", "values": [ { "value": "none", "description": "Disable DDL handling." }, { "value": "validate", "description": "Validate the schema, make no changes to the database." }, { "value": "update", "description": "Update the schema if necessary." }, { "value": "create", "description": "Create the schema and destroy previous data." }, { "value": "create-drop", "description": "Create and then destroy the schema at the end of the session." } ] } ] }
properties 数组中包含的JSON对象可以包含下表中描述的属性。
タイプ | 目的 | |
---|---|---|
文字列 | 属性の完全な名前。名前は小文字でピリオドで区切られます (server.address など)。この属性は必須です。 | |
String | プロパティのデータ型 (java.lang.String など) の完全な署名ですが、完全な署名もあります。ジェネリック型 (例: java.util.Map | |
String | ユーザーに表示できるプロパティの短い説明。記載がない場合は省略可能です。説明の最後の行はピリオド (.) で終わる必要があります。 | |
String | このプロパティを提供したソースのクラス名。たとえば、プロパティが @ConfigurationProperties アノテーションが付けられたクラスからのものである場合、プロパティにはクラスの完全修飾名が含まれます。ソースタイプが不明な場合は省略できます。 | |
Object | デフォルト値。このプロパティが指定されていない場合は、この値が使用されます。プロパティの型が配列の場合は、値の配列にすることができます。デフォルト値が不明な場合は省略できます。 | |
Deprecation | 属性が非推奨かどうかを指定します。このフィールドが廃止されていない場合、またはこの情報が不明な場合は省略できます。次の表に、非推奨属性の詳細を示します。 |
タイプ | 目的 | |
---|---|---|
文字列 | このヒントが示すプロパティの完全な名前。名前は小文字のピリオドで区切られた形式です (spring.mvc.servlet.path など)。この属性は必須です。 | |
ValueHint[] | ValueHint オブジェクトによって定義される有効な値のリスト (次の表で説明)。各エントリには定義された値があり、説明を含めることができます。 |
目的 | 値 | |
---|---|---|
ヒントが指す要素の有効な値。プロパティの型が配列の場合は、配列値にすることもできます。この属性は必須です。 | description | |
ユーザーに表示できる値の短い説明。記載がない場合は省略可能です。説明の最後の行はピリオド (.) で終わる必要があります。 |
以上がSpringBoot の外部化を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。