SpringMVC动态配置双数据源
来源:互联网 发布:手机角度水平仪软件 编辑:程序博客网 时间:2024/06/05 04:53
由于项目开通了多个进件渠道,数据白天会存在多个数据库中,日终才会整合。现在需要搞多个数据源去动态查询各个数据库的数据,本文配置了两个数据源,话不多说,接看代码。
applicationContext.xml
<!-- 可以读取多个位置的配置文件--> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <!-- <list> --> <value>classpath:jdbc.properties</value> <!-- </list> --> </property> </bean> <context:component-scan base-package="com.jp.*" /> <!-- 定义数据源第一个数据源 ,使用C3P0数据源实现 --> <!-- 设置连接数据库的驱动、URL、用户名、密码 连接池最大连接数、最小连接数、初始连接数等参数 --> <bean id="dataSourceOne" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass"> <value>${jdbc.driver}</value> </property> <property name="jdbcUrl"> <value>${jdbc.url}</value> </property> <property name="user"> <value>${jdbc.username}</value> </property> <property name="password"> <value>${jdbc.password}</value> </property> <property name="maxPoolSize"> <value>${maxPoolSize}</value> </property> <property name="minPoolSize"> <value>${minPoolSize}</value> </property> <property name="initialPoolSize"> <value>${initialPoolSize}</value> </property> <property name="maxIdleTime"> <value>${maxIdleTime}</value> </property> <property name="idleConnectionTestPeriod"> <value>${idleConnectionTestPeriod}</value> </property> <property name="acquireRetryAttempts"> <value>${acquireRetryAttempts}</value> </property> <property name="breakAfterAcquireFailure"> <value>${breakAfterAcquireFailure}</value> </property> <property name="testConnectionOnCheckout"> <value>${testConnectionOnCheckout}</value> </property> </bean> <!-- 定义数据源第二个数据源 ,使用C3P0数据源实现 --> <!-- 设置连接数据库的驱动、URL、用户名、密码 连接池最大连接数、最小连接数、初始连接数等参数 --> <bean id="dataSourceTwo" destroy-method="close" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass"> <value>${jdbc2.driver}</value> </property> <property name="jdbcUrl"> <value>${jdbc2.url}</value> </property> <property name="user"> <value>${jdbc2.username}</value> </property> <property name="password"> <value>${jdbc2.password}</value> </property> <property name="maxPoolSize"> <value>${maxPoolSize}</value> </property> <property name="minPoolSize"> <value>${minPoolSize}</value> </property> <property name="initialPoolSize"> <value>${initialPoolSize}</value> </property> <property name="maxIdleTime"> <value>${maxIdleTime}</value> </property> <property name="idleConnectionTestPeriod"> <value>${idleConnectionTestPeriod}</value> </property> <property name="acquireRetryAttempts"> <value>${acquireRetryAttempts}</value> </property> <property name="breakAfterAcquireFailure"> <value>${breakAfterAcquireFailure}</value> </property> <property name="testConnectionOnCheckout"> <value>${testConnectionOnCheckout}</value> </property> </bean> <!-- 动态数据源 加载转换 默认 MYSQL--> <bean id="dynamicDataSource" class="com.jp.controller.switchDatesource.DataSources"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry value-ref="dataSourceOne" key="MYSQL"></entry> <entry value-ref="dataSourceTwo" key="ORACLE"></entry> </map> </property> <property name="defaultTargetDataSource" ref="dataSourceOne"> </property> </bean> <!-- 配置 jdbcTemplate--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dynamicDataSource"></property> </bean> <!-- JNDI方式配置数据源 --> <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${jndiName}"></property> </bean> -->
com/jp/controller/switchDatesource/DataSourceInstances.java
public class DataSourceInstances { public static final String MYSQL="MYSQL"; public static final String ORACLE="ORACLE"; }
com/jp/controller/switchDatesource/DataSources.java
package com.jp.controller.switchDatesource;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;//AbstractRoutingDataSource说是springmvc为多数据源编写的工具类public class DataSources extends AbstractRoutingDataSource{ Object DATESOURCE = null; @Override protected Object determineCurrentLookupKey() { DATESOURCE = DataSourceSwitch.getDataSourceType(); if (DATESOURCE == null) { DATESOURCE = "MYSQL"; } return DATESOURCE; }}
com/jp/controller/switchDatesource/DataSourceSwitch.java
package com.jp.controller.switchDatesource;public class DataSourceSwitch { private static final ThreadLocal contextHolder=new ThreadLocal(); public static void setDataSourceType(String dataSourceType){ contextHolder.set(dataSourceType); } public static String getDataSourceType(){ return (String) contextHolder.get(); } public static void clearDataSourceType(){ contextHolder.remove(); } }
com/jp/controller/TestAction.java
package com.jp.controller;import *;@Controller@RequestMapping("/index")public class TestAction { @Autowired private UserServlce userservlce; UserQuery uq =new UserQuery (); @RequestMapping("/ORACLE.do") String ORACLE() { DataSourceSwitch.setDataSourceType(DataSourceInstances.ORACLE);//通过DataSourceSwitch配置指定数据源 UserQuery userlist = userservlce.findAll( uq); for (User m : userlist.getUserList()) { System.out.println(m.getLoginName()); } return "userlist"; }@RequestMapping("/MYSQL.do")String MYSQL() { //通过DataSourceSwitch配置指定数据源 DataSourceSwitch.setDataSourceType(DataSourceInstances.MYSQL); UserQuery userlist = userservlce.findAll( uq); for (User m : userlist.getUserList()) { System.out.println(m.getLoginName()); } return "userlist"; }}
xml,对数据库进行配置,对关紧的就是
<!-- 动态数据源 加载转换 默认 MYSQL-->
<bean id="dynamicDataSource" class="com.jp.controller.switchDatesource.DataSources">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSourceOne" key="MYSQL"></entry>
<entry value-ref="dataSourceTwo" key="ORACLE"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSourceOne">
</property>
</bean>
总结 :
这里面指定了动态数据源转换的java类,
然后action访问的时候会 通过DataSourceSwitch.setDataSourceType()配置指定数据,
通过DataSources (extends AbstractRoutingDataSource)切换xml的加载数据源.
- SpringMVC动态配置双数据源
- SpringMVC配置双数据源
- SpringMVC配置双数据源
- 配置双数据源
- Spring+SpringMVC+Mybatis使用注解方式配置双数据源
- spring配置双数据源
- spring配置双数据源
- SpringMVC配置双数据源,一个java项目同时连接两个数据库
- SpringMVC配置双数据源,一个java项目同时连接两个数据库
- springmvc配置双数据源访问其中一个数据源报错?
- 双数据源开发,相关配置
- spring+ibatis 双数据源配置
- hibernate的双数据源的配置
- mybatis+spring双数据源配置
- 双数据源
- java DB 双数据源和数据库事务配置
- Spring+Mybatis+MySql双数据源配置(手动切换数据源)
- SpringBoot使用JdbcTemplate的双数据源配置
- 代码混淆 GSON完满解决
- Uva
- Java System.out.println()的解释
- 条件随机场学习
- Shiro 分布式架构下 Session 的共享实现
- SpringMVC动态配置双数据源
- java设计模式之原型模式
- 在vs2015连接oracle的方法
- Sublime text 3基本问题随机笔记
- Android sqlite数据库操作笔记
- js深度克隆
- linux常见错误码
- Milking Time POJ
- 《C++ Primer》第10章:泛型算法 学习笔记总结