SpringBoot - 繫結配置檔案註解
@ImportResource
@ImportResource註解用於匯入Spring的配置檔案,讓配置檔案裡面的內容生效;(就是以前寫的springmvc.xml、applicationContext.xml)
Spring Boot裡面沒有Spring的配置檔案,我們自己編寫的配置檔案,也不能自動識別;
想讓Spring的配置檔案生效,載入進來;@ImportResource標註在一個配置類上。
注意!這個註解是放在主入口函式的類上或配置類上
@ImportResource(locations = "classpath:beans.xml")
@ConfigurationProperties
Spring原始碼中大量使用了ConfigurationProperties註解,比如server.port
就是由該註解獲取到的,通過與其他註解配合使用,能夠實現Bean的按需配置。
該註解有一個prefix屬性,通過指定的字首,繫結配置檔案中的配置,該註解可以放在類上,也可以放在方法上
可以從註解說明中看到,當將該註解作用於方法上時,如果想要有效的繫結配置,那麼該方法需要有@Bean註解且所屬Class需要有@Configuration註解。
總結:就是該類必須要被載入到容器中
作用於方法
配置檔案內容
#資料來源 spring.datasource.druid.write.url=jdbc:mysql://localhost:3306/jpa spring.datasource.druid.write.username=root spring.datasource.druid.write.password=1 spring.datasource.druid.write.driver-class-name=com.mysql.jdbc.Driver
java程式碼
@Configuration public class DruidDataSourceConfig { /** * DataSource 配置 * * @return */ @ConfigurationProperties(prefix = "spring.datasource.druid.read") @Bean(name = "readDruidDataSource") public DataSource readDruidDataSource() { return new DruidDataSource(); } }
作用於Class類
配置檔案內容
spring.datasource.url=jdbc:mysql://xxx/xxx
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
java程式碼
@ConfigurationProperties(prefix = "spring.datasource") @Component public class DatasourcePro { private String url; private String username; private String password; // 配置檔案中是driver-class-name, 轉駝峰命名便可以繫結成 private String driverClassName; private String type; }
@ConfigurationProperties 和 @value 有著相同的功能,但是 @ConfigurationProperties的寫法更為方便
@ConfigurationProperties 的 POJO類的命名比較嚴格,因為它必須和prefix的字尾名要一致, 不然值會繫結不上, 特殊的字尾名是“driver-class-name”這種帶橫槓的情況,在POJO裡面的命名規則是下劃線轉駝峰就可以繫結成功,所以就是 “driverClassName”
@EnableConfigurationProperties
@EnableConfigurationProperties註解的作用是:使使用 @ConfigurationProperties 註解的類生效並注入到容器中。
如果一個配置類只配置@ConfigurationProperties註解,而沒有使用@Component,那麼在IOC容器中是獲取不到properties 配置檔案轉化的bean。 說白了 @EnableConfigurationProperties 相當於把使用 @ConfigurationProperties 的類進行了一次注入。@ConfigurationProperties(prefix = "service.config") public class HelloServiceProperties { }
@Configuration @EnableConfigurationProperties(HelloServiceProperties.class) public class HelloServiceAutoConfiguration { }