zoukankan      html  css  js  c++  java
  • 动态修改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迁移过来

  • 相关阅读:
    Scala(四)流程控制
    Scala(九)异常
    Idea中安装翻译插件
    hiveserver2启动卡住问题解决方案
    Scala(十)隐式转换
    Scala(七)集合
    Scala(六)面向对象
    Scala(八)模式匹配
    SharePoint 2010 文档库添加文件icon
    Windows Server 2008 r2 在Hyperv里搭建SharePoint 2010开发环境
  • 原文地址:https://www.cnblogs.com/hbwblog/p/7254095.html
Copyright © 2011-2022 走看看