中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SpringBoot教程之屬性加載詳解

目錄

  • 加載 property 順序

    茅箭網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

  • 隨機(jī)屬性

  • 命令行屬性

  • Application 屬性文件

  • Profile 特定屬性

  • 屬性中的占位符

  • YAML 屬性

  • 訪問(wèn)屬性

  • 多 profile 配置

  • YAML 的缺點(diǎn)

  • 屬性前綴

  • 屬性松散綁定規(guī)則

  • 屬性轉(zhuǎn)換

  • 時(shí)間單位轉(zhuǎn)換

  • 數(shù)據(jù)大小轉(zhuǎn)換

  • 校驗(yàn)屬性

加載 property 順序

Spring Boot 加載 property 順序如下:

  1. Devtools 全局配置?(當(dāng) devtools 被激活?\~/.spring-boot-devtools.properties).

  2. ="https://docs.spring.io/spring/docs/5.1.3.RELEASE/javadoc-api/org/springframework/test/context/TestPropertySource.html">測(cè)試環(huán)境中的 @TestPropertySource 注解配置

  3. 測(cè)試環(huán)境中的屬性?properties@SpringBootTest?和?測(cè)試注解.

  4. 命令行參數(shù)

  5. SPRING_APPLICATION_JSON?屬性

  6. ServletConfig?初始化參數(shù)

  7. ServletContext?初始化參數(shù)

  8. JNDI attributes from 通過(guò)?java:comp/env?配置的 JNDI 屬性

  9. Java 系統(tǒng)屬性 (System.getProperties())

  10. 操作系統(tǒng)環(huán)境比那里

  11. RandomValuePropertySource?加載?random.*?形式的屬性

  12. jar 包外的?application-{profile}.properties?或?application-{profile}.yml?配置

  13. jar 包內(nèi)的?application-{profile}.properties?或?application-{profile}.yml?配置

  14. jar 包外的?application.properties?或?application.yml?配置

  15. jar 包內(nèi)的?application.properties?或?application.yml?配置

  16. @PropertySource?綁定的配置

  17. 默認(rèn)屬性 (通過(guò)?SpringApplication.setDefaultProperties?指定)

隨機(jī)屬性

RandomValuePropertySource?類用于配置隨機(jī)值。

示例:

my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}

命令行屬性

默認(rèn)情況下,?SpringApplication?會(huì)獲取?--?參數(shù)(例如?--server.port=9000?),并將這個(gè)?property?添加到 Spring 的?Environment?中。

如果不想加載命令行屬性,可以通過(guò)?SpringApplication.setAddCommandLineProperties(false)禁用。

Application 屬性文件

SpringApplication?會(huì)自動(dòng)加載以下路徑下的?application.properties?配置文件,將其中的屬性讀到 Spring 的?Environment?中。

  1. 當(dāng)前目錄的?/config?子目錄

  2. 當(dāng)前目錄

  3. classpath 路徑下的?/config?package

  4. classpath 根路徑

注:
以上列表的配置文件會(huì)根據(jù)順序,后序的配置會(huì)覆蓋前序的配置。
你可以選擇?YAML(yml)?配置文件替換 properties 配置文件。

如果不喜歡?application.properties?作為配置文件名,可以使用?spring.config.name?環(huán)境變量替換:

$?java?-jar?myproject.jar?--spring.config.name=myproject

可以使用?spring.config.location?環(huán)境變量指定配置文件路徑:

$?java?-jar?myproject.jar?--spring.config.location=classpath:/default.properties,classpath:/override.properties

Profile 特定屬性

如果定義?application-{profile}.properties?形式的配置文件,將被視為?profile?環(huán)境下的特定配置。

可以通過(guò)?spring.profiles.active?參數(shù)來(lái)激活 profile,如果沒(méi)有激活的 profile,默認(rèn)會(huì)加載?application-default.properties?中的配置。

屬性中的占位符

application.properties?中的值會(huì)被?Environment?過(guò)濾,所以,可以引用之前定義的屬性。

app.name=MyApp
app.description=${app.name}?is?a?Spring?Boot?application
注:你可以使用此技術(shù)來(lái)創(chuàng)建 Spring Boot 屬性變量。請(qǐng)參考:?Section 77.4, “Use ‘Short’ Command Line Arguments

YAML 屬性

Spring Framework provides two convenient classes that can be used to load YAML documents. The?YamlPropertiesFactoryBean?loads YAML as?Properties?and the?YamlMapFactoryBean?loads YAML as a?Map.

Spring 框架有兩個(gè)類支持加載 YAML 文件。

  • YamlPropertiesFactoryBean?將 YAML 文件的配置加載為?Properties?。

  • YamlMapFactoryBean?將 YAML 文件的配置加載為?Map?。

示例 1

environments:
	dev:
		url:?http://dev.example.com
		name:?Developer?Setup
	prod:
		url:?http://another.example.com
		name:?My?Cool?App

等價(jià)于:

environments.dev.url=http://dev.example.com
environments.dev.name=Developer?Setup
environments.prod.url=http://another.example.com
environments.prod.name=My?Cool?App

YAML 支持列表形式,等價(jià)于 property 中的?[index]?:

my:
servers:
	-?dev.example.com
	-?another.example.com

等價(jià)于

my.servers[0]=dev.example.com
my.servers[1]=another.example.com

訪問(wèn)屬性

YamlPropertySourceLoader?類會(huì)將 YAML 配置轉(zhuǎn)化為 Spring?Environment?類中的?PropertySource?。然后,你可以如同 properties 文件中的屬性一樣,使用?@Value?注解來(lái)訪問(wèn) YAML 中配置的屬性。

多 profile 配置

server:
??address:?192.168.1.100
---
spring:
??profiles:?development
server:
??address:?127.0.0.1
---
spring:
??profiles:?production?&?eu-central
server:
??address:?192.168.1.120

YAML 的缺點(diǎn)

注:YAML 注解中的屬性不能通過(guò)?@PropertySource?注解來(lái)訪問(wèn)。所以,如果你的項(xiàng)目中使用了一些自定義屬性文件,建議不要用 YAML。

屬性前綴

package?com.example;

import?java.net.InetAddress;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.List;

import?org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix="acme")
public?class?AcmeProperties?{

	private?boolean?enabled;

	private?InetAddress?remoteAddress;

	private?final?Security?security?=?new?Security();

	public?boolean?isEnabled()?{?...?}

	public?void?setEnabled(boolean?enabled)?{?...?}

	public?InetAddress?getRemoteAddress()?{?...?}

	public?void?setRemoteAddress(InetAddress?remoteAddress)?{?...?}

	public?Security?getSecurity()?{?...?}

	public?static?class?Security?{

		private?String?username;

		private?String?password;

		private?List<String>?roles?=?new?ArrayList<>(Collections.singleton("USER"));

		public?String?getUsername()?{?...?}

		public?void?setUsername(String?username)?{?...?}

		public?String?getPassword()?{?...?}

		public?void?setPassword(String?password)?{?...?}

		public?List<String>?getRoles()?{?...?}

		public?void?setRoles(List<String>?roles)?{?...?}

	}
}

相當(dāng)于支持配置以下屬性:

  • acme.enabled

  • acme.remote-address

  • acme.security.username

  • acme.security.password

  • acme.security.roles

然后,你需要使用?@EnableConfigurationProperties?注解將屬性類注入配置類中。

@Configuration
@EnableConfigurationProperties(AcmeProperties.class)
public?class?MyConfiguration?{
}

屬性松散綁定規(guī)則

Spring Boot 屬性名綁定比較松散。

以下屬性 key 都是等價(jià)的:

PropertyNoteacme.my-project.person.first-name-分隔acme.myProject.person.firstName駝峰命名acme.my_project.person.first_name_分隔ACME_MYPROJECT_PERSON_FIRSTNAME大寫(xiě)字母

屬性轉(zhuǎn)換

如果需要類型轉(zhuǎn)換,你可以提供一個(gè)?ConversionService?bean (一個(gè)名叫?conversionService的 bean) 或自定義屬性配置 (一個(gè)?CustomEditorConfigurer?bean) 或自定義的?Converters?(被?@ConfigurationPropertiesBinding?注解修飾的 bena)。

時(shí)間單位轉(zhuǎn)換

Spring 使用?java.time.Duration?類代表時(shí)間大小,以下場(chǎng)景適用:

  • 除非指定?@DurationUnit?,否則一個(gè) long 代表的時(shí)間為毫秒。

  • ISO-8601 標(biāo)準(zhǔn)格式(?java.time.Duration?的實(shí)現(xiàn)就是參照此標(biāo)準(zhǔn))

  • 你也可以使用以下支持的單位:

    • ns?- 納秒

    • us?- 微秒

    • ms?- 毫秒

    • s?- 秒

    • m?- 分

    • h?- 時(shí)

    • d?- 天

示例:

@ConfigurationProperties("app.system")
public?class?AppSystemProperties?{

	@DurationUnit(ChronoUnit.SECONDS)
	private?Duration?sessionTimeout?=?Duration.ofSeconds(30);

	private?Duration?readTimeout?=?Duration.ofMillis(1000);

	public?Duration?getSessionTimeout()?{
		return?this.sessionTimeout;
	}

	public?void?setSessionTimeout(Duration?sessionTimeout)?{
		this.sessionTimeout?=?sessionTimeout;
	}

	public?Duration?getReadTimeout()?{
		return?this.readTimeout;
	}

	public?void?setReadTimeout(Duration?readTimeout)?{
		this.readTimeout?=?readTimeout;
	}

}

數(shù)據(jù)大小轉(zhuǎn)換

Spring 使用?DataSize?類代表數(shù)據(jù)大小,以下場(chǎng)景適用:

  • long 值(默認(rèn)視為 byte)

  • 你也可以使用以下支持的單位:

    • B

    • KB

    • MB

    • GB

    • TB

示例:

@ConfigurationProperties("app.io")
public?class?AppIoProperties?{

	@DataSizeUnit(DataUnit.MEGABYTES)
	private?DataSize?bufferSize?=?DataSize.ofMegabytes(2);

	private?DataSize?sizeThreshold?=?DataSize.ofBytes(512);

	public?DataSize?getBufferSize()?{
		return?this.bufferSize;
	}

	public?void?setBufferSize(DataSize?bufferSize)?{
		this.bufferSize?=?bufferSize;
	}

	public?DataSize?getSizeThreshold()?{
		return?this.sizeThreshold;
	}

	public?void?setSizeThreshold(DataSize?sizeThreshold)?{
		this.sizeThreshold?=?sizeThreshold;
	}

}

校驗(yàn)屬性

@ConfigurationProperties(prefix="acme")
@Validated
public?class?AcmeProperties?{

	@NotNull
	private?InetAddress?remoteAddress;

	@Valid
	private?final?Security?security?=?new?Security();

	//?...?getters?and?setters

	public?static?class?Security?{

		@NotEmpty
		public?String?username;

		//?...?getters?and?setters

	}

}

你也可以自定義一個(gè)名為?configurationPropertiesValidator?的校驗(yàn)器 Bean。獲取這個(gè)?@Bean?的方法必須聲明為?static

使用方法:

mvn?clean?package
cd?target
java?-jar?sbe-core-property.jar

本人免費(fèi)整理了Java高級(jí)資料,涵蓋了Java、redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并發(fā)分布式等教程,一共30G,需要自己領(lǐng)取。

傳送門(mén):https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q

名稱欄目:SpringBoot教程之屬性加載詳解
本文路徑:http://www.rwnh.cn/article48/jdcehp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)App開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
普定县| 鸡泽县| 东兰县| 甘孜县| 正阳县| 华宁县| 昌都县| 武乡县| 班玛县| 湖北省| 唐河县| 大宁县| 顺昌县| 德格县| 平陆县| 库尔勒市| 准格尔旗| 句容市| 育儿| 古浪县| 峨边| 南乐县| 银川市| 新泰市| 通州区| 定边县| 南皮县| 镇雄县| 洪泽县| 黔江区| 汕头市| 巩义市| 怀安县| 乐安县| 无极县| 翁源县| 班戈县| 灵石县| 和静县| 富蕴县| 柘城县|