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;
     }

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

  • 相关阅读:
    20175311 2018-2019-2 《Java程序设计》第7周学习总结
    20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
    20175314 《信息安全系统设计基础》课程总结
    USCOSII
    改进ls的实现
    cat userlist
    实现ls
    stat命令的实现-mysate
    实现mypwd
    2019-2020-1 20175314_20175316 实验五 通讯协议设计
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3149495.html
Copyright © 2011-2022 走看看