1. 程式人生 > 其它 >SpringBoot - 繫結配置檔案註解

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 {

}