我在属性文件中有数据库配置:
port=8080
host=host-default
host-default 显然是 DNS。下面是我的配置类:
@Configuration
@Slf4j
public class DatabaseConfig {
@Value("${port}")
private int port;
@Value("${host}")
private String hostname;
@Bean
public DatabaseTemplate databaseTemplate() {
try {
return new DatabaseTemplate(client());
} catch (Exception e) {
log.error("Ex: " + e.getMessage(), e);
return null;
}
}
@Bean
public Client client() throws UnknownHostException {
TransportAddress address = new InetSocketTransportAddress(InetAddress.getByName(this.hostname), this.port);
client.addTransportAddress(address);
return client;
}
}
所以,有一个问题。当服务器运行时,同时我更改 DNS,与数据库的连接将消失。目前我无法刷新配置。我可以捕捉到 DNS 更改的时刻,但无法更新配置。你有什么想法吗?我试图破坏 DatabaseTemplate 单例,但它没有帮助。谢谢
最佳答案
您将需要创建一个包装数据库连接的新 bean,然后根据计划更新它:
@Component
public class DataSourceManager implements DataSource{
private DataSource dataSource;
@PostConstruct
@Scheduled(fixedRate=1000)
public void reload() {
// init the datasource
}
public DataSource getDataSource(String dbName) {
return dataSource;
}
@Override
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
.... wrap all the other DataSource methods
}
关于java - 即时刷新数据库配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44716195/