zoukankan      html  css  js  c++  java
  • 动态修改数据源配置

    因项目需要能动态修改数据源的配置,及修改后不用重启整个应用。使用的数据源是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;
     }

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

  • 相关阅读:
    mobile app 的总结
    ie和火狐javascript区别
    zepto源码注释
    ie6bug
    html5游戏网站
    jquery作者封装函数
    vue element 动态表格
    uniapp 对 系统的控制,全屏,系统虚拟键盘,手机导航,强制横屏
    环形图表记录
    清除所有的滚动条
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3149495.html
Copyright © 2011-2022 走看看