mybatis动态连接数据库

applicationContext.xml

<bean id="defaultDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${default.driver}" />
  <property name="url" value="${default.url}" />
  <property name="username" value="${default.username}" />
  <property name="password" value="${default.password}" />
 </bean>

 <bean id="dataSource" class="com.ceict.ems.common.db.DynamicDataSource">
  <property name="targetDataSources">
   <map>
    <entry key="default" value-ref="defaultDataSource" />
   </map>
  </property>
 </bean>

 

 

public class DynamicDataSource extends AbstractRoutingDataSource {

    private Map<Object, Object> _targetDataSources;

    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDataSource();
    }

    public void setTargetDataSources(Map<Object, Object> 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;
    }
}

 

 

动态创建

 

  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默认的配置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值