Spring 官方完整文檔:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle
Spring 官方配置文檔:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
參考:http://www.javashuo.com/article/p-puiuyyig-ev.htmlhtml
Spring Boot 採用的「默認大於配置」的原則,即便沒有配置,也可使用默認配置正常啓動應用。java
默認全局配置文件的文件名是 application,常見的有 application.properties
、application.yml
(YAML 格式)、application.xml
(XML 格式),web
application.properties 示例:spring
server.port=8081
application.yml 示例:segmentfault
server: port: 8081
application.xml 示例:app
<server> <port>8081</port> </server>
要經過 @ConfigurationProperties
註解使用配置文件,須要先 導入依賴,IDEA 會很智能的在自動導入依賴失敗時,彈出 Spring 提示的相關文檔信息,根據提示操做便可。dom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
server: port: 8081 person: name: kika age: 83 maps: key1: v1 key2: 2 lists: - zhangsan - lisi - wangwu birth: 2011/01/01 dog: name: dd age: 2
@ConfigurationProperties(prefix = "person")
註解將當前類中的全部屬性跟配置文件綁定,能夠經過參數 prefix 指定前綴。配置文件的文件名必須是 application,例如 application.yml、application.properties、application-dev.yml 等。對於自定義的配置文件,須要用 @PropertySource 註解指定。ide
@Component
註解將當前類添加到 Spring 容器中,從而可使用容器的各類功能。svg
@Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; private Map<String, Object> maps; private List<Object> lists; private Dog dog; @Override public String toString() { return "Person{" + "name=" + name + ", age=" + age + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + "}"; } //... getter/setter 方法
在 /src/test/java/包名 下面,有 XXApplicationTests 測試類。藉助測試類,能夠方便的注入。spring-boot
經過這個測試類來檢查剛纔的配置是否加載成功:
@RunWith(SpringRunner.class) @SpringBootTest public class DemoQuickApplicationTests { @Autowired Person person; // 自動關聯到這個類 @Test public void contextLoads() { System.out.println(person); // 測試輸出 } }
測試文件寫完後,右擊運行測試類便可執行測試,查看控制檯的輸出便可。
經過 @ConfigurationProperties
引入整個配置文件,用 @Value
能夠引入單個配置。@Value 註解支持3種語法:
#{3+5}
@Value("${person.name}") private String name; @Value("#{11+3}") private Integer age; @Value("true") private Boolean adult;
@Value("#{11+3}")
@Component @ConfigurationProperties(prefix = "person") @Validated public class Person { @Email private String name; // 若是不知足郵箱校驗,會報錯 //...
若是使用了非全局配置文件,自定義了配置文件的名稱,能夠用 @PropertySource 註解來加載:
@PropertySource(value ="classpath:person.yml") @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Date birth; //...
以前都是用 XML 配置文件向容器中添加組件,有幾個步驟,
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloService" class="com.kikakika.demo_quick.service.HelloService"></bean> </beans>
@ImportResource(locations = {"classpath:beans.xml"}) @SpringBootApplication public class DemoQuickApplication { public static void main(String[] args) { SpringApplication.run(DemoQuickApplication.class, args); } }
@RunWith(SpringRunner.class) @SpringBootTest public class DemoQuickApplicationTests { @Autowired ApplicationContext ioc; @Test public void testHelloService() { boolean b = ioc.containsBean("helloService"); System.out.println(b); } }
@Bean
註解的方式添加組件Spring Boot 開始,推薦用 @Bean
註解的方式添加組件,用配置類替代配置文件:
package com.kikakika.demo_quick.config; import com.kikakika.demo_quick.service.HelloService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyConfig { // @Bean 註解能夠將方法返回值添加到容器中,容器中對應組件的默認ID就是方法名 @Bean public HelloService helloService() { System.out.println("success add component"); return new HelloService(); } }
類寫完後,不須要在 Spring Boot 的啓動類中引入,Spring 掃描文件後會自動引入,再執行一次上面的測試,能夠看到結果。
Spring Boot 的配置文件中,能夠指定佔位符,會自動解析,相似格式化輸出中的 %d
、\n
等,語法:
${prefix.key[:default-value]}
例如 ${person.name:zhangsan}
,系統解析時找不到 person.name 屬性時,會自動使用默認值 zhangsan,不然使用找到的屬性。
佔位符中,有個特殊的隨機值 random,能夠生成隨機的整型、字符串、UUID 等,例如 ${random.int}
、${random.uuid}
等
person: name: kika${random.uuid} age: ${random.int} maps: key1: ${person.age:30} key2: 2
在開發、測試、生產環境的配置文件一般是不一樣的,有下面幾種方式能夠指定配置文件:
java -jar xx.jar --spring.profiles.active=dev
-Dspring.profiles.active=dev
通常會將不一樣環境的配置文檔獨立,例如:
Spring Boot 會默認加載 application.yml 文件,因此能夠在這個文件裏指定要激活使用的配置文件,例以下面例子會加載 application-dev.yml 文件:
spring: profiles: active: dev
YAML 支持多文檔塊,若是多個環境的配置寫在一個文件中,須要在每一個文檔塊中聲明對應的環境:
server: port: 8081 spring: profiles: active: prod --- server: port: 8082 spring: profiles: dev --- server: port: 8083 spring: profiles: prod
Spring Boot 默認支持的配置文件名爲 application.properties 和 application.yml,默認會依次掃描的位置包括:
能夠經過 spring.config.location 改變默認的配置文件位置。
外部配置官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config
Spring Boot 支持多種外部配置,常見的有(按優先級從高到低排列):
java -jar xx.jar --server.port=8088 --server.context-path=/hello