數據庫的相關配置,通常來講是不會頻繁變的,特別是當數據庫鏈接使用的是域名而不是ip地址的時候,這樣即便ip地址變化了,也不影響業務系統。這裏呢,咱們講一下若是真的是無可奈何的時候,有沒有不重啓就能夠更改配置的方法。html
有不少種方案,這裏咱們講一下基於SpringCloud的RefreshScope的方案。spring
spring: datasource: platform: postgres url: jdbc:postgresql://192.168.99.100:5432/postgres driverClassName: org.postgresql.Driver username: postgres password: 123456 validation-query: SELECT 1 test-while-idle: true test-on-borrow: true
@Configuration public class DbConfig { @Bean @RefreshScope //refresh @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } }
調用一下服務的refresh端點就能夠了sql
curl -i -X POST http://localhost:9001/refresh
@Component public class ScheduleTask { @Autowired UserRepository userRepository; @Scheduled(fixedDelay = 5*1000 /**ms**/,initialDelay = 5*1000) public void testDataSourceConn() { try{ System.out.println("call jdbc"); userRepository.findAll(); }catch (Exception e){ e.printStackTrace(); } } }
這裏跑一個定時任務,不停地調用數據查詢方法,而後中途改下密碼,而後refresh一下,看是否報錯數據庫
Refresh Scopecurl