详见 http://www.iteye.com/topic/1125897
Applicationcontext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-autowire="byName">
<!-- 数据源 -->
<bean id="parentDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="trace" value="true"/>
</bean>
<bean id="sc" parent="parentDataSource">
<property name="driverUrl" value="jdbc:oracle:thin:@172.16.6.220:1521:cmes"/>
<property name="user" value="meams"/>
<property name="password" value="xwcmes"/>
</bean>
<bean id="lz" parent="parentDataSource">
<property name="driverUrl" value="jdbc:oracle:thin:@172.16.6.220:1521:cmes"/>
<property name="user" value="geams"/>
<property name="password" value="geams"/>
</bean>
<bean id="dataSource" class="com.core.db.DataSources">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="sc" key="MINE_01"/>
<entry value-ref="lz" key="MINE_02"/>
</map>
</property>
</bean>
<!-- 事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 自定义exception处理 -->
<bean id="exceptionResolver" class="com.core.framework.CommonExceptionHandler"/>
<!-- 添加Mybatis支持 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:config/ibatis-config.xml"/>
<!-- 无需配置ibatis-config.xml中的mapper 由spring自动扫描加入 -->
<property name="mapperLocations" value="classpath:com/dhcc/exchange/ibatis/*.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<!-- 自动将映射接口转换为bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage="com.dhcc.exchange.*.dao"
p:sqlSessionFactory-ref="sqlSessionFactory">
</bean>
<bean id="storageService" class="com.dhcc.exchange.storage.service.StorageService" />
</beans>
Ibatis.xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="EQUI_STORAGE" type="com.dhcc.exchange.storage.model.Storage" />
</typeAliases>
</configuration>
Storage.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dhcc.exchange.storage.dao.StorageDao">
<resultMap type="com.dhcc.exchange.storage.model.Storage" id="EQUI_STORAGE_LIST"/>
<select id="queryStorageList" resultMap="EQUI_STORAGE_LIST" parameterType="EQUI_STORAGE">
select id,storage_name from t_equi_storage t
</select>
</mapper>
Datasourceconstant.java
public class DataSourceConstant {
public final static String MINE_01 = "MINE_01";
public final static String MINE_02 = "MINE_02";
}
Datasources
package com.core.db;</SPAN>
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DataSources extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceSwitch.getDataSourceType();
}
}
Datasourceswitch
public class DataSourceSwitch{
private static final ThreadLocal<String> contextHolder=new ThreadLocal<String>();
public static void setDataSourceType(String dataSourceType){
contextHolder.set(dataSourceType);
}
public static String getDataSourceType(){
return (String) contextHolder.get();
}
public static void clearDataSourceType(){
contextHolder.remove();
}
}
StorageDao .java
package com.dhcc.exchange.storage.dao;
import com.dhcc.exchange.storage.model.Storage;
import java.util.List;
public abstract interface StorageDao {
public abstract List<Storage> queryStorageList(Storage paramVO);
}
Storageimpl.java
package com.dhcc.exchange.storage.dao.impl;
import java.util.List;
import com.core.framework.BaseDao;
import com.dhcc.exchange.storage.dao.StorageDao;
import com.dhcc.exchange.storage.model.Storage;
public class StorageImpl extends BaseDao implements StorageDao {
@SuppressWarnings("unchecked")
@Override
public List<Storage> queryStorageList(Storage paramVO) {
return this.getSqlSession().selectList("queryStorageList", paramVO);
}
}
Storage .java
package com.dhcc.exchange.storage.model;
public class Storage {
private String ID;
private String storage_name;
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getStorage_name() {
return storage_name;
}
public void setStorage_name(String storage_name) {
this.storage_name = storage_name;
}
}
Storageservice.java
public class StorageService extends BaseService {
@Autowired
private StorageDao storageDao;
public String getStroage() throws ServiceException{
String returnVal = "";
try {
DataSourceSwitch.setDataSourceType(DataSourceConstant.MINE_01);
List<Storage> storages = storageDao.queryStorageList(new Storage());
returnVal = binder.toJson(storages);
Tracer.trace(returnVal);
log.debug("[StorageService.getStroage]JSON IS:"+returnVal);
} catch (Exception e) {
throw new ServiceException("查询菜单列表失败", e);
}
return returnVal;
}
}
分享到:
相关推荐
1. 基于Aspectj实现动态数据源切换,支持类级、方法级,方法级优先于类级 2. 实现数据源动态注册、修改、删除,无需重启服务 3. 实现同时兼容多种数据源连接池 4. 实现动态数据源连接池属性配置 5. 采用双端队列实现...
用于详细描述配置spring下多数据源动态切换方案的实施配置说明。可以自动切换数据源的配置。
spring boot mybatis plus 多数据源切换的demo解压运行
请自行修改com/resources/datasource.properties中数据库配置,Demo中配置的两个数据源,一个是Mysql,一个是Oracle。 运行之前请自行建立数据库的表。
java spring 多数据源目前版本为mysql版本 利用spring aop 切面,自动切换数据源。
通过简单的demo实现SpingBoot多数据源配置并动态切换多数据源
Springcloud 多数库 多数据源整合,查询动态切换数据库
mybatis+spring实现动态切换数据源,修改数据源配置信息之后,直接运行test可进行测试
首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。 其次,实现简单,易于维护。这个方案虽然我说...
spring mybatis 多数据源动态切换
spring boot整合druid连接池,采用注解方式实现多数据源动态切换 jdk版本1.8 spring boot版本1.5.14
spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制
基于注解的Spring多数据源配置和使用 前一段时间研究了一下spring多数据源的配置和使用,...后来发现其实基于spring来配置和使用多数据源还是比较简单的,因为spring框架已经预留了这样的接口可以方便数据源的切换。
Mybatis+Spring+SpringMVC+quartz多数据源切换 定时任务 多数据库之间同步
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。 spring多数据源 动态 创建 切换使用
Spring+SpringMvc+MybatisPlus实现多数据源切换、利用自定义Aop注解,只需要在需要切换数据库的方法上加上注解即可实现、极大避免了代码冗余。
通过SpringAop实现多数据源的动态切换 并采用Druid连接池,可扩展继续增加数据库配置。
一个spring boot动态切换多数据源的完整demo。
使用注解配置实现Spring动态数据源切换,实现原理 1、自定义动态数据源类DynamicDataSource: 实现spring类AbstractRoutingDataSource的方法determineCurrentLookupKey 2、自定义Spring AOP类DataSourceAspect 3、...
spring 动态切换数据源