• 动态修改JDBC数据源配置


    因项目需要能动态修改数据源的配置,及修改后不用重启整个应用。使用的数据源是apache的BasicDataSource,网上千篇一律的是如下实现:

    BasicDataSource bds=getDataSource();
      try{
       bds.close();
       
      }
      catch(Exception e){
       e.printStackTrace();
      }
      bds.setUsername("sa");
      bds.setPassword("admin");

     

    还说要先关闭,再修改配置才能生效。

     

    这样的代码根本就实现不了所说的功能,直接运行出错。连接池关闭后,就无法使用了。本身也没有open,reopen之类的方法。

    也有说C3P0支持热修改,但本身好像有bug,容易出错死锁错误。也就没有去研究到底支持不。

    BasicDataSource 的close方法其实只设置了一个标识变量:closed,标记为关闭就取不到连接,要是能修改该标识为非关闭,就可以继续使用了。

    所以实现的思路是:先关闭,再修改配置,再打开标识。问题是BasicDataSource并没有这样的接口提供出来,幸运的是,BasicDataSource中的

    closed属性是protected,也就是我们可以在子类中访问到这个属性,也就可以进行修改了。

    所以只要自定义一个类继承于BasicDataSource,提供如下方法即可:

    public void open(){
      this.closed=false;
     }

     

    当然配置文件中使用的数据源的类名就需要改为这个自定义类了。

    说明:文章为作者从CSDN迁移过来

  • 相关阅读:
    转-关于图片或者文件在数据库的存储方式归纳
    转-数据流图的画法
    Effective Java2-学习笔记 第11-20条
    Effective Java2-学习笔记 第1-10条
    Python面向对象-学习笔记
    python基础语法-学习笔记
    C# 获取时间戳
    C# 时间格式转换
    C# 获取IP地址
    Http post请求
  • 原文地址:https://www.cnblogs.com/hbwblog/p/7254095.html
Copyright © 2020-2023  润新知