spring mvc 多数据源的配置
来源:互联网 发布:平面设计师所用的软件 编辑:程序博客网 时间:2024/05/09 14:29
spring-XXX.xml 配置文件中 配置
<!-- dataSourceB中配置的是H2内存数据库 -->
<bean id="dataSourceB" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:mem:test"/>
<property name="username" value="sa" />
<property name="password" value="" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>
<!-- dataSourceA中配置的是mysql数据库 -->
<bean id="dataSourceA" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat" />
</bean>
<!-- 关键在如下配置-->
<bean id="dataSource" class="com.test.DynamicDataSource">
<!-- 通过key-value的形式来关联数据源 -->
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSourceA" key="dataSourceA"></entry>
<entry value-ref="dataSourceB" key="dataSourceB"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSourceA" >
</property>
</bean>
DynamicDataSource.java
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource{
/*public static final String DATA_SOURCE_A = "dataSourceA";
public static final String DATA_SOURCE_B = "dataSourceB";
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setCustomerType(String customerType) {
contextHolder.set(customerType);
}
public static String getCustomerType() {
return contextHolder.get();
}
public static void clearCustomerType() {
contextHolder.remove();
}
*/
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDbType();
}
}
DataSourceContextHolder.java
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static final String DATA_SOURCE_A = "dataSourceA";
public static final String DATA_SOURCE_B = "dataSourceB";
public static void setDbType(String dbType) {
contextHolder.set(dbType);
}
public static String getDbType() {
return ((String) contextHolder.get());
}
public static void clearDbType() {
contextHolder.remove();
}
}
<!-- 配置结束 -->
引用如下:
@Controller
@RequestMapping("/Test")
@Transactional(rollbackFor=Exception.class)
public class TestController {
@Resource
private H2Service H2service;
@Resource
private MysqlService msqlservice;
@Transactional
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String insert(HttpSession session,HttpServletResponse res) {
res.addHeader("Cache-Control","no-cache, must-revalidate");
DataSourceContextHolder.setDbType("dataSourceA");//重点是这里
//这是在调用service之前设置是启用哪个数据源
msqlservice.XX();
DataSourceContextHolder.setDbType("dataSourceB");//重点是这里
H2service.XX();
return "";
}
}
----- yt.Liu
- spring mvc 多数据源的配置
- spring MVC+MyBatis 多数据源配置
- spring mvc 多数据源配置
- Spring MVC 配置多数据源
- Spring MVC +MyBatis 多数据源配置
- Spring mvc 配置mongodb多数据源
- Spring MVC多数据源动态切换配置
- spring hibernate 多数据源的配置
- Spring多数据源的配置(荐)
- Spring多数据源的配置
- Spring多数据源的配置
- spring 中多数据源的配置
- Spring多数据源的配置
- spring 多数据源的配置
- spring+mybatis多数据源的配置
- Spring多数据源的配置
- spring配置多数据源
- Spring多数据源配置
- 解决Android adb端口被占用的问题
- 35. Search Insert Position
- Ubuntu 14.04 搭建 Cisco IPSec VPN 服务器教程
- Python爬虫(一):环境配置
- OkHttp完全解析(六)拦截器
- spring mvc 多数据源的配置
- vs2010 创建和C#使用动态链接库(dll)
- redis的基本操作
- UItableview刷新一行、一个区
- 二代旅游CMS网站管理系统使用手册(三)--计调线路团期录入
- android 动画详解
- linux安装openvpn手记
- Android Volley完全解析
- 浅拷贝造成的 内存被重复释放