⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 sf.gg/a/1190000010323489 「codecraft」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

数据库的相关配置,一般来说是不会频繁变的,特别是当数据库连接使用的是域名而不是ip地址的时候,这样即使ip地址变化了,也不影响业务系统。这里呢,我们讲一下如果真的是迫不得已的时候,有没有不重启就可以更改配置的方法。

思路

有很多种方案,这里我们讲一下基于SpringCloud的RefreshScope的方案。

数据库配置实例

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

Java配置

@Configuration
public class DbConfig {

@Bean
@RefreshScope //refresh
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
}

更新

调用一下服务的refresh端点就可以了

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一下,看是否报错

doc

文章目录
  1. 1.
  2. 2. 思路
  3. 3. 数据库配置实例
  4. 4. Java配置
  5. 5. 更新
  6. 6. 验证
  7. 7. doc