动态修改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迁移过来
动态修改JDBC数据源配置的更多相关文章
- Spring BeanPostProcessor与动态加载数据源配置
前言: 本文旨在介绍Spring动态配置数据源的方式,即对一个DataSource的配置诸如jdbcUrl,user,password,driverClass都通过运行时指定,而非由xml静态配置定死 ...
- vue-cli3抽离配置文件,动态修改打包后配置
由于项目有外部部署需求,对不同的环境前端调用后台的地址不一样,且不能提前预知必须到部署现场后才能确定后端地址,故需要将调用后端相关的配置抽离到文件中,打包后部署人员在方便现场修改. 思路如下: 1.由 ...
- jdbc数据源配置
initCtx.lookup("java:comp/env") 在 容器的conf/ xxxconf.xml http://yuxiatongzhi.iteye.com/blog/ ...
- weblogic配置jdbc数据源
weblogic配置jdbc数据源的过程 方法/步骤 启动weblogic 管理服务器,使用管理用户登录weblogic管理控制台 打开管理控制台后,在左侧的树形域结构中,选择服务->数 ...
- Elasticsearch 动态修改replica配置、增删replica
1. 获取当前所有index配置 curl -XGET http://localhost:9200/_settings 2. 获取某些index的配置 curl -XGET http://localh ...
- Tomcat 5.5 JNDI Resource 配置 (tomcat数据源配置)
转自:http://blog.csdn.net/fenglibing/article/details/4528512 Tomcat 5.5 JNDI Resource 配置 Author Blog:h ...
- mysql连接超时与jndi数据源配置
昨天有运营说添加活动不能用了,我就看了一下后台日志,发现访问数据库是报错: at java.lang.Thread.run(Thread.java:722) Caused by: com.mysql. ...
- Springboot多数据源配置--数据源动态切换
在上一篇我们介绍了多数据源,但是我们会发现在实际中我们很少直接获取数据源对象进行操作,我们常用的是jdbcTemplate或者是jpa进行操作数据库.那么这一节我们将要介绍怎么进行多数据源动态切换.添 ...
- Spring-Boot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离
一.基础介绍 多数据源字面意思,比如说二个数据库,甚至不同类型的数据库.在用SpringBoot开发项目时,随着业务量的扩大,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源. ...
随机推荐
- C# 对象相等性判断和同一性判断
在日常开发中经常需要编写代码比较不同的对象.例如,有时需要将对象都放到一个集合中,并编写代码对集合中的对象进行排序.搜索或者比较. System.Object类有两个Equals方法,如下: 1.实例 ...
- ubuntu生成core转储文件
1.ulimit -c 判断是否开启转储 为0 则没有开启 2.ulimit -c unlimited 设置转储core大小没有限制 3.设置转储文件位置 echo "/var/core/% ...
- ES6 箭头函数 this 指向
ES6 箭头函数 this 指向 箭头函数有几个使用注意点: 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个 ...
- iphoneX 适配
1.iphoneX的尺寸 375*812 上边有44px的危险区,下边有34px的危险区,剩下的是安全区. 2.viewport设值cover <meta name="viewp ...
- jquery插件开发三种方法
1.好像之前看视频记录下来的,不记得了. //类级别插件开发,主要是在jQuery中定义全局方法: //第一种写法 jQuery.myFunc = function(str){ alert(" ...
- invalid request block size: 4542 (max 4096)...skip引起的Nginx 502 Bad Geteway
今天有用户报告了一个issue: 当他访问我们的网站时出现了以下错误: 但是我访问同样的地址却没有这个问题,连续访问多次,查看uWSGI日志发现出现以下ERROR: 原来是请求头的大小超出了uWSGI ...
- 解释mysql 语句 ——解释CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
在我们创建mysql数据库的时候我们经常会用到这句SQL:CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ ...
- SpringBoot入门 (二) 属性文件读取
在上一篇中介绍了在idea中创建springboot工程及使用web工程输出“helloworld”到前端页面,本文学习在springboot工程中读取属性文件中的属性值. 一 自定义属性 在appl ...
- 终于完成了-- github.com/salomon1184/METP
- JavaScript中函数的变量提升问题
函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量) 1.函数的声明 => function myFn(){}; 2.函数的表达式 => var myFn = fun ...