您的位置:首页 > 数据库

mybatis动态连接数据库

2011-11-28 18:29 302 查看
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默认的配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: