在上一篇博客中,已經很容易的獲取到了配置文件的變化,只要配置文件發生變化,只要用POST方式訪問下/actuator/bus-refresh,就刷新到改變了的新屬性值。可是有一個地方比較特別,就是如果你改的是數據庫,卻絲毫沒有效果,別的屬性明明已經得到了改變,說明動態刷新配置文件是成功了的,那爲什麼偏偏只有關於數據庫的並沒有變化呢,明明已經換了數據庫,值有所變化纔對,但卻還讀的是改動之前的數據庫。一開始的我,還以爲是動態刷新配置文件沒有實現呢,後來多次測試發現,動態刷新配置文件是成功的,自定義的配置屬性ip一改,就能得到變化,只有數據庫是怎麼改到不變的,後來多次查證實踐,發現關於數據庫,需要單獨寫一個讀取數據的配置類,每次刷新的時候重新獲取數據源,就可以了
配置類如下
@Configuration
public class DataSourceConfigure {
@Bean
@RefreshScope
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource(DataSourceProperties properties){
System.out.println("執行了重新獲取數據源");
return DataSourceBuilder.create(properties.getClassLoader())
.type(HikariDataSource.class)
.driverClassName(properties.determineDriverClassName())
.url(properties.determineUrl())
.username(properties.determineUsername())
.password(properties.determinePassword())
.build();
}
}
@Configuration,用於定義配置類,等價於<Beans></Beans>
@Bean等價於<Bean></Bean>
@ConfigurationProperties獲取配置在 application.properties 或 application.yml 文件中的參數值
@Primary,優先選擇,自動裝配時當出現多個Bean候選者時,被註解爲@Primary的Bean將作爲首選者
@RefreshScope,配置文件自動刷新