總結一下註解方式的屬性注入,順便引入一下SpringBoot的註解@ConfigurationPropertiesjava
user.username=jack user.password=root user.hobby[0]=book user.hobby[1]=music
@Data @AllArgsConstructor @NoArgsConstructor @PropertySource("application.properties") public class User { @Value("${user.username}") private String username; @Value("${user.password}") private String password; @Value("${user.hobby[]}") private String[] hobby; private Address address; private List list; private Set set; private Map map; private Properties properties; } //這種方式很難注入複雜的引用類型,並且一個個注入太麻煩了
@Data @Component //@ConfigurationPropertiesScan //@ComponentScan(basePackages = "com.ty") @ConfigurationProperties(prefix = "user") @ConditionalOnBean(name = "user") public class User { private String username; private String password; private String[] hobby; private Address address; private List list; private Set set; private Map map; private Properties properties;
@Data @ConfigurationProperties(prefix = "user") @EnableConfigurationProperties(User.class) public class User { private String username; private String password; private String[] hobby; private Address address; private List list; private Set set; private Map map; private Properties properties; }
另外@EnableConfigurationProperties註解不止能夠修飾在POJO上,還能夠寫在應用類上spring
@SpringBootTest(classes = User.class) @EnableConfigurationProperties(User.class) public class TestUser { @Autowired private User user; @Test void testUser1() { System.out.println(user); } }
ps:若是編寫測試程序代碼最好跟業務代碼相關類的那個包保持相同數據庫
好比java下的com.ty.service,測試的時候最後也是建一個相同的包,即:test下的com.ty.service編程
也能夠不相同,這樣的話就須要在@SpringBootTest註解上配置上要進行的測試類,並且還須要配置@ComponentScan或者數組
@ConfigurationPropertiesScan註解,用來掃描啓動類tomcat
再說一下條件裝配註解@Conditional,這個註解以前說過是指知足Conditional指定的條件,纔會進行組件注入服務器
在SpringBoot對它進行了不少實現app
下面就說說配置文件,SpringBoot一共支持2種配置文件,Properties配置和YAML配置,兩種配置文件通用,只是展示方式的區別運維
和之前的properties用法相同,以key = value的方式,不過多贅述!maven
YAML是「YAML Ain't Markup Language YAML不是一種標記語言」的外語縮寫,但爲了強調這種語言以數據作爲中心,而不是以置標語言爲重點,而用返璞詞從新命名。它是一種直觀的可以被電腦識別的數據序列化格式,是一個可讀性高而且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。它是相似於標準通用標記語言的子集XML的數據描述語言,語法比XML簡單不少。
基本使用:
使用key : 空格 value的方式表示
大小寫敏感
使用縮進表示層級關係
禁止使用tab縮進,只能使用空格鍵
縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級。
使用#表示註釋
符串能夠不用引號標註
數據格式表示
或者
key: - value1 - value2 - value3
或者
key : key 1: value1 key 2: value2 key 3: value3
基本/簡單類型:key : value
鍵值對集合類型:key : {key 1:value1, key 2:value2, key 3:value3}
數組/集合類型:key: [value1,value2,value3]
舉例
首先先導一下依賴,這樣配置的時候會有自動提示
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!--打jar包的時候忽略配置提示的相關類--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
建立application.yml或者application.yaml
user: username: tom password: root hobby: - book - "music" - 'eat' list: [a,b,c,a] set: - a - b - c - a map: name: james tom score: 85 65 other: {pet: tomcat,hobby: sing} address: [大連,上海,杭州,杭州] properties: {book: 西遊}
配置文件能夠用在多環境配置,實際開發中,同一套代碼可能同時部署到開發、測試、生產等多個服務器中,每一個環境中諸如數據庫密碼等這些個性化配置是避免不了的,雖然咱們能夠經過自動化運維部署的方式使用外部參數在服務啓動時臨時替換屬性值,但這也意味着運維成本增高。
步驟很是簡單,直接在resources目錄下建立多個配置文件
好比:application-dev.yml、application-test.yml、application-prod.yml、application.yml
而後在其它的配置文件編寫對應環境的配置,使用的時候直接在application.yml配置中切換環境
spring: profiles: active: dev/test/prod