本例將採用maven管理,代碼託管在github上,地址:https://github.com/wolf909867753/springboot。
1。創建maven-module,properties,並在pom.xml中添加springboot依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>properties</artifactId> <packaging>war</packaging> <name>springboot-properties Demo</name> <url>http://maven.apache.org</url> <!-- Spring Boot 啓動父依賴 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <dependencies> <!-- Spring Boot Web 依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>properties</finalName> </build> </project>
工程目錄如下:
代碼參考github code
使用application.properties配置文件加載的測試DEMO
參考com.springboot.properties此包下的code
1.創建HomeProperties類
@Component @ConfigurationProperties(prefix="home") public class HomeProperties { /** * 省份 */ private String province; /** * 城市 */ private String city; /** * 描述 */ private String desc; getter/setter.....}
2.配置文件
application-pro.properties
home.province = shang dong sheng home.city = wei fang shi home.desc = [application-pro] i come from ${home.province} ${home.city}.
application-dev.properties
home.province = shandong home.city = weifang home.desc = [application-dev] i come from ${home.province}--${home.city}
application.properties
spring.profiles.active=pro
3.測試
參考test下com.springboot.properties.PropertiesTest.java
@SpringBootApplication public class PropertiesTest implements CommandLineRunner{ @Autowired private HomeProperties homeProperties; @Override public void run(String... strings) throws Exception { System.out.println(">>>>>>>>>>>>>> "+homeProperties.toString()); } /** * 使用application.yml運行輸出以下結果: * HomeProperties{province='山東省', city='濰坊市', desc='我來自山東省濰坊市.'} * * 使用application.properties根據spring.profiles.active的value運行加載其對應的application-*.properties輸出以下結果: * HomePropertiesYML{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'} */ public static void main(String[] args) { SpringApplication.run(PropertiesTest.class,args); } }
運行main方法,加載使用application.properties根據spring.profiles.active的value運行加載其對應的application-*.properties輸出以下結果:
HomeProperties{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'}
=======================================================================================
使用application.yml配置文件加載的測試DEMO
參考com.springboot.properties此包下的code
1.創建HomePropertiesYML.java
@Component public class HomePropertiesYML { /** * 省份 */ @Value("${home.province}") private String province; /** * 城市 */ @Value("${home.city}") private String city; /** * 描述 */ @Value("${home.desc}") private String desc; getter/setter....}
2.配置文件
application.yml 注意項目下不能同時存在application.properties 和 application.yml
home: province : 山東省 city : 濰坊市 desc : 我來自${home.province}${home.city}.
3.測試
參考test下com.springboot.properties.YMLpropertiesTest.java
@SpringBootApplication public class YMLpropertiesTest implements CommandLineRunner { @Autowired private HomePropertiesYML homePropertiesYML; @Override public void run(String... strings) throws Exception { System.out.println(">>>>>>>>>>>> "+homePropertiesYML.toString()); } /** * 使用application.yml運行輸出以下結果: * HomePropertiesYML{province='山東省', city='濰坊市', desc='我來自山東省濰坊市.'} * * 使用application.properties根據spring.profiles.active的value運行加載其對應的application-*.properties輸出以下結果: * HomePropertiesYML{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'} */ public static void main(String[] args) { SpringApplication.run(YMLpropertiesTest.class,args); // System.exit(-1); } }
運行main方法,加載使用application.yml配置文件,輸出以下結果:
HomePropertiesYML{province='山東省', city='濰坊市', desc='我來自山東省濰坊市.'}
小結:
/**
* Spring Boot 配置文件 使用application.properties
* 測試類參考test目錄下的PropertiesTest.java
*一、自動配置
* Spring Boot 提供了對應用進行自動化配置。相比以前 XML 配置方式,很多顯式方式申明是不需要的。二者,大多數默認的配置足夠實現開發功能,從而更快速開發。
* 什麼是自動配置?
* Spring Boot 提供了默認的配置,如默認的 Bean ,去運行 Spring 應用。它是非侵入式的,只提供一個默認實現。
* 大多數情況下,自動配置的 Bean 滿足了現有的業務場景,不需要去覆蓋。但如果自動配置做的不夠好,需要覆蓋配置。
* 比如通過命令行動態指定某個 jar ,按不同環境啓動。那怎麼辦?這裏先要考慮到配置的優先級。
*
* Spring Boot 不單單從 application.properties 獲取配置,所以我們可以在程序中多種設置配置屬性。按照以下列表的優先級排列:
* 1.命令行參數
* 2.java:comp/env 裏的 JNDI 屬性
* 3.JVM 系統屬性
* 4.操作系統環境變量
* 5.RandomValuePropertySource 屬性類生成的 random.* 屬性
* 6.應用以外的 application.properties(或 yml)文件
* 7.打包在應用內的 application.properties(或 yml)文件
* 8.在應用 @Configuration 配置類中,用 @PropertySource 註解聲明的屬性文件
* 9.SpringApplication.setDefaultProperties 聲明的默認屬性
*
* 可見,命令行參數優先級最高。這個可以根據這個優先級,可以在測試或生產環境中快速地修改配置參數值,而不需要重新打包和部署應用。
* 還有第 6 點,根據這個在多 moudle 的項目中,比如常見的項目分 api 、service、dao 等 moudles,往往會加一個 deploy moudle 去打包該業務各個子 moudle,
* 應用以外的配置優先。
*
* 二.@ConfigurationProperties(prefix="home")
* 通過 @ConfigurationProperties(prefix = “home”) 註解,將配置文件中以 home 前綴的屬性值自動綁定到對應的字段中。
* 同是用 @Component 作爲 Bean 注入到 Spring 容器中。
*
* 注意:當reources中同時存在application.properties ,application.yml文件時,spring優先啓動application.properties配置文件
*/
多環境配置 很多場景的配置,比如數據庫配置、Redis 配置、註冊中心和日誌配置等。在不同的環境,我們需要不同的包去運行項目。所以看項目結構,有兩個環境的配置: application-dev.properties:開發環境 application-prod.properties:生產環境 Spring Boot 是通過 application.properties 文件中,設置 spring.profiles.active 屬性,比如 ,配置了 dev ,則加載的是 application-dev.properties : # Spring Profiles Active spring.profiles.active=dev 那運行PropertiesTest應用啓動類,從控制檯中可以看出,是加載了 application-dev.properties 的屬性輸出: HomeProperties{province='shang dong', city='wei fang', desc='[application-dev] i come from shang dong wei fang.'} 將 spring.profiles.active 設置成 prod,重新運行,可得到 application-pro.properties的屬性輸出: HomeProperties{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'} 根據優先級,順便介紹下 jar 運行的方式,通過設置 -Dspring.profiles.active=pro 去指定相應的配置: mvn package java -jar -Dspring.profiles.active=prod springboot-properties-0.0.1-SNAPSHOT.jar