Sping Boot入門到實戰之入門篇(三):Spring Boot屬性配置
阿新 • • 發佈:2018-03-01
git 測試 add 禁用 rop fix ron org set 該篇為Sping Boot入門到實戰系列入門篇的第三篇。介紹Spring Boot的屬性配置。
傳統的Spring Web應用自定義屬性一般是通過添加一個demo.properties配置文件(文件名自定義),然後在xml配置中通過
Spring Boot中,可以在多個地方配置屬性,包括properties文件,yaml文件,環境變量, 系統屬性,命令行參數等, 這些屬性都會被Spring Boot加到Environment中,可通過@Value註解,Environment 實例,或 @ConfigurationProperties註解的類來訪問。
屬性加載優先級順序:
<util:properties id="demoProps" location="classpath:demo.properties" />
引入屬性文件。再定義一個Bean來讀取這些屬性,Bean配置:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="staticMethod" value="包名.DemoUtil.init" /> <property name="arguments"> <list> <ref bean="demoProps" /> </list> </property> </bean>
Bean定義:
public class DemoUtil { private static Properties properties; static void init(Properties props) { properties = props; } public static String getValue(String key){ return properties.getProperty(key); } }
在其它地方通過DemoUtil.getValue()方法來訪問具體某個屬性的值。
- 如果有使用devtools,devtools 全局設置的屬性(用戶目錄 ~/.spring-bootdevtools.properties)
- 測試類的註解@TestPropertySource
- 測試類屬性註解 @SpringBootTest#properties
- 命令行參數
- SPRING_APPLICATION_JSON裏的屬性(環境變量或系統屬性)
- ServletConfig初始化參數
- ServletContext初始化參數
- JNDI參數 java:comp/env
- Java系統屬性 System.getProperties()
- 操作系統環境變量
- RandomValuePropertySource 配置的屬性 random.*
- jar包外部的applictaion-{profile}.properties,applictaion-{profile}.yml配置文件
- jar包內部的applictaion-{profile}.properties,applictaion-{profile}.yml配置文件
- jar包外部的applictaion.properties,applictaion.yml配置文件
- jar包內部的applictaion.properties,applictaion.yml配置文件
- @Configuration類上的 @PropertySource註解指定的配置文件
- 默認屬性: SpringApplication.setDefaultProperties
java -jar springboot-demo-properties.jar --my.name=command_line_devlink
該參數值將會覆蓋應用其它地方的同名屬性配置值。命令行參數放在xx.jar 的後面。
可以通過SpringApplication.setAddCommandLineProperties(false) 禁用命令行參數配置 2. Java系統屬性 同樣在啟動Spring Boot應用時,可以指定Java系統屬性,如:java -Dmy.name=system_properties_devlink -jar springboot-demo-properties.jar
Java系統屬性放在java命令之後。
3. 操作系統環境變量 配置過JAVA_HOME的應該理解何為環境變量。某些操作系統可能不支持.分隔的屬性名,可以改為以下劃線連接。Spring Boot將myName, my.name, MY_NAME視為等效。 4. 應用屬性配置文件(.properties文件或 .yml文件) .properties文件屬性配置格式:my.name=devlink my.list[0]=aaa //配置列表 my.list[1]=bbb
.yml文件屬性配置格式:
my: name: devlink list: //配置列表 - aaa - bbb
yml中,屬性名與值之間冒號後面必須有空格。
應用屬性配置文件位置:- jar包所在當前目錄下的子目錄/config
- jar包所在當前目錄
- classpath根目錄下的子目錄/config
- classpath根目錄
@Value("${my.name}") private String myName;
可以指定默認值,如 @Value("${my.gender:f}"), 當my.gender未配置時,默認使用值"f"
2. 通過@ConfigurationProperties註解的類來訪問。如定義:@Configuration @ConfigurationProperties(prefix = "my") public class MyConfig { private String name; getter/setter; }
然後在需要訪問的Bean中,通過@Autowired 註入MyConfig實例,通過getName()方法即可訪問my.name屬性值。
3. 通過Environment 實例訪問。如:@Autowired private Environment env;
然後調用env.getProperty("my.name")訪問。
本篇源碼:https://github.com/ronwxy/springboot-learning/tree/master/springboot-demo-propertiesSping Boot入門到實戰之入門篇(三):Spring Boot屬性配置