mysql 动态加载数据库数据库连接,mysql动态连接数据库

1.配置xml文件

applicationContext.xml

2.编写动态连接的接口:

public class DynamicDataSource extends AbstractRoutingDataSource {

private Map _targetDataSources;

@Override

protected Object determineCurrentLookupKey() {

return DataSourceContextHolder.getDataSource();

}

public void setTargetDataSources(Map targetDataSources) {

this._targetDataSources = targetDataSources;

super.setTargetDataSources(targetDataSources);

afterPropertiesSet();

}

public String getDbtype(String key) {

String driver = ((BasicDataSource) _targetDataSources.get(key))

.getDriverClassName();

if ("oracle.jdbc.driver.OracleDriver".equals(driver)) {

return "oracle";

} else if ("com.mysql.jdbc.Driver".equals(driver)) {

return "mysql";

}

return null;

}

public void addTargetDataSource(String key, DataSource dataSource) {

_targetDataSources.put(key, dataSource);

this.setTargetDataSources(_targetDataSources);

}

public static DataSource createDataSource(String driverClassName,

String url, String username, String password) {

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName(driverClassName);

dataSource.setUrl(url);

dataSource.setUsername(username);

dataSource.setPassword(password);

dataSource.setTestWhileIdle(true);

if ("oracle.jdbc.driver.OracleDriver".equals(driverClassName)) {

dataSource.setValidationQuery("SELECT 1 FROM DUAL");

} else if ("com.mysql.jdbc.Driver".equals(driverClassName)) {

dataSource.setValidationQuery("SELECT NOW()");

}

return dataSource;

}

}3.测试:

DynamicDataSource dynamicDataSource = ApplicationUtil

.getBean(DynamicDataSource.class);

BasicDataSource dataSource = DynamicDataSource.createDataSource(driverClassName,url,userName,password)

dynamicDataSource.addTargetDataSource("dbkey", dataSource );

DataSourceContextHolder.setDataSource("dbkey");

// 通过以上语句可以将数据库连接配置修改为当前设置的

//执行自己的DAO方法

DataSourceContextHolder.clearDataSource();//恢复数据库的配置为applicationContext.xml默认的配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值