java - 即时刷新数据库配置

标签 java database spring properties dns

我在属性文件中有数据库配置:

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/

相关文章:

java - 以 postgresql 的确切单词正则表达式模式开头

mysql - 省略前 5 行?

java - 堆栈溢出java

java - 使用 Struts 2 标签将 java 方法的值传递给 javascript 变量

MySql 查询按月或年获取数据

database - 内存数据库如何提供持久性?

java - 使用 Apache HttpClient Api 时 Java 对象的反序列化不起作用

java - 删除 Spring RepositoryRestResource 中的 "_embedded"属性

java - 在 Spring 的 WebApplicationInitializer 中排序监听器

java - 连接器 J 安装