SpringBoot(二) 主程式詳解和配置檔案如何配置
SpringBoot主程式詳解
1 /** 2 * @SpringBootApplication 來標註一個主程式類,說明這是一個Spring Boot應用 3 */ 4 @SpringBootApplication 5 public class HelloWorldMainApplication { 6 7 public static void main(String[] args) { 8 9 // Spring應用啟動起來 10 SpringApplication.run(HelloWorldMainApplication.class,args); 11 } 12 }
上段程式是一個SpringBoot主程式,入口方法。
@SpringBootApplication:Spring Boot應用標註在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就應該執行這個類的main方法來啟動SpringBoot應用;
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters= { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication {}
@SpringBootConfiguration:Spring Boot的配置類,標註在某個類上,表示這是一個Spring Boot的配置類。
@EnableAutoConfiguration
@EnableAutoConfigurationImportSelector:匯入哪些元件的選擇器。將所有需要匯入的元件以全類名的方式返回;這些元件就會被新增到容器中。有了自動配置類,免去了我們手動編寫配置注入功能元件等的工作。
SpringBoot 配置
Spring Boot使用了一個全域性的配置檔案application.properties,放在src/main/resources目錄下或者類路徑的/config下。
Sping Boot的全域性配置檔案的作用:修改SpringBoot自動配置的預設值。SpringBoot在底層都會給我們自動配置好。
名稱是固定的:application.properties 或者 application.yml
yml是YAML(YAML Ain’t Markup Language)語言。它是以資料為中心的語言,它比json、xml更適合做配置檔案。
配置例項:
<!-- xml形式配置 --> <server> <port>8081</port> </server> <!-- properties形式配置 --> server.port=8081 <!-- yml形式配置 --> server: port: 8081
YML語法 自定義屬性
1.基本語法
書寫形式 k: v ==> 表示一對鍵值對(冒號和v之間的空格必須有);
以空格的縮排來控制層級關係;只要是左對齊的一列資料,都是同一個層級的。
屬性值的英文大小寫敏感。
server: port: 8081 path: /hello
2.字面量
普通的值(數字,字串,布林): k: v ==> v 直接編寫數字,字串,布林等值。如果是字串新增雙引號,則不會進行轉義。使用單引號會進行轉義。
物件: k : v
friends:
lastName: zhangsan
age: 20
//也可以和ajax一樣編寫
friends: {lastName: zhangsan,age: 18}
陣列(list、set等):
pets: - cat - dog - pig //或者 pets: [cat,dog,pig]
3.使用配置檔案中的值
1 //配置檔案 2 person: 3 lastName: hello 4 age: 18 5 boss: false 6 maps: {k1: 11,k2: 12} 7 list: 8 - lisi 9 - wangwu 10 dog: 11 name: 小狗 12 age: 12 13 14 15 16 /** 17 * 將配置檔案中配置的每一個屬性的值,對映到這個元件中 18 * @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置檔案中相關的配置進行繫結. 19 * prefix = "person":配置檔案中哪個下面的所有屬性進行一一對映 20 * 21 * 只有這個元件是容器中的元件,才能容器提供的@ConfigurationProperties功能; 22 * 23 */ 24 @Component 25 @ConfigurationProperties(prefix = "person") 26 public class Person { 27 28 private String lastName; 29 private Integer age; 30 private Boolean boss; 31 private List<Object> list; 32 private Dog dog; 33 } 34 35 36 //pom.xml檔案新增屬性 37 <!--匯入配置檔案處理器,配置檔案進行繫結就會有提示--> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-configuration-processor</artifactId> 41 <optional>true</optional> 42 </dependency>
還需要在spring Boot入口類加上@EnableConfigurationProperties並指明要載入哪個bean,如果不寫ConfigBean.class,在建好的類那邊新增。最後在Controller中引入ConfigBean使用即可。注意使用自動注入的註解。
在1.5的版本之後,需要新增@Configuration和@PropertySource(“classpath:xxxxxx.properties”)後才可以讀取。
1 /** 2 * 將配置檔案中配置的每一個屬性的值,對映到這個元件中 3 * @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置檔案中相關的配置進行繫結; 4 * prefix = "person":配置檔案中哪個下面的所有屬性進行一一對映 5 * 6 * 只有這個元件是容器中的元件,才能容器提供的@ConfigurationProperties功能; 7 * @ConfigurationProperties(prefix = "person")預設從全域性配置檔案中獲取值; 8 * 9 */ 10 @PropertySource(value = {"classpath:person.properties"}) 11 @Component 12 @ConfigurationProperties(prefix = "person") 13 //@Validated 14 public class Person {}
4.使用配置檔案生成隨機數
在配置檔案中${random} 可以用來生成各種不同型別的隨機值,例如 生成 int 值、long 值或者 string 字串。
secret=${random.value} number=${random.int} longnumber=${random.long} uuid=${random.uuid}
@Value和@Validated
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置檔案中的屬性 | 一個個指定 |
鬆散繫結(鬆散語法) | 支援 | 不支援 |
SpEL | 不支援 | 支援 |
JSR303資料校驗 | 支援 | 不支援 |
複雜型別封裝 | 支援 | 不支援 |
配置檔案yml還是properties他們都能獲取到值。
書寫形式: @Value("${配置檔案中的key}")。注意key要全稱。
例如:@Value("${person.age}"),@Value("${person.dog.name}")
計算: @Value("#{12*2}") ==> 對應的值就是24
資料校驗:@Valiadated註解自動校驗。
1 @Component 2 @ConfigurationProperties(prefix = "person") 3 @Validated 4 public class Person { 5 //lastName必須是郵箱格式 6 @Email 7 private String lastName; 8 //@Value("#{11*2}") 9 private Integer age; 10 //@Value("true") 11 private Boolean boss; 12 13 private Date birth; 14 private Map<String,Object> maps; 15 private List<Object> lists; 16 private Dog dog; 17 }
配置檔案讀取優先順序
application.properties和application.yml檔案可以放在一下四個位置:
- 外接,在相對於應用程式執行目錄的/congfig子目錄裡。
- 外接,在應用程式執行的目錄裡
- 內建,在config包內
- 內建,在Classpath根目錄
按照優先順序排序,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性
另外,如果在相同優先順序位置同時有application.properties和application.yml,那麼application.yml裡面的屬性就會覆蓋application.properties裡的屬性。
Profile多環境配置
當應用程式需要部署到不同執行環境時,一些配置細節通常會有所不同,尤其是開發過程中的開發環境和生產環境的配置檔案。
如果按照以前的做法,就是每次釋出的時候替換掉配置檔案,這樣太麻煩了,Spring Boot的Profile就給我們提供瞭解決方案,命令帶上引數就搞定。
在Spring Boot中多環境配置檔名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如: application-test.properties:開發環境 application-prod.properties:生產環境
想要使用對應的環境,只需要在application.properties中使用spring.profiles.active屬性來設定,值對應上面提到的{profile},也就是上述程式碼的test、prod這2個。
server: port: 8081 spring: profiles: active: prod --- server: port: 8083 spring: profiles: test --- server: port: 8084 spring: profiles: prod #指定屬於哪個環境