- 浏览: 1192742 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (883)
- Spring (101)
- Swing (1)
- Mysql (21)
- Js (59)
- Jsp (2)
- Hibernate (19)
- Myeclipse (5)
- SqlServer 2000 (2)
- poi (15)
- Java (70)
- SSH (12)
- Html (47)
- Fusion Charts (1)
- C\C++ (2)
- 汇编 (36)
- Jquery (37)
- Struts2 (6)
- Ubuntu (16)
- powerDesinger (4)
- Jboss (3)
- JAX-RS (13)
- JAXB (5)
- JAX-WS (11)
- JMS (4)
- WebSocket (8)
- PHP (16)
- Flash (1)
- maven (3)
- Oracle (8)
- HttpClient (6)
- sqlserver (19)
- svn (5)
- Tomcat (3)
- Jdbc (3)
- EsayUi (11)
- 微信公众平台 (19)
- IIS (2)
- Freemarker (11)
- Comet (1)
- Spring MVC (85)
- JBoss Seam (3)
- 二维码 (9)
- Spring Security (4)
- Ehcache (3)
- Apache Shiro (7)
- jackson (16)
- JPA (8)
- jcaptcha (2)
- RSA (2)
- Ajax (6)
- 跟我学Shiro (0)
- Spring4 (19)
- 跟我学spring3 (0)
- css (32)
- excel (4)
- Filter (3)
- 微信公众帐号开发教程 (0)
- Android (6)
- log4j (6)
- 淘宝接口 (17)
- 支付集成 (3)
- 单点登录 (3)
- Html5 (27)
- 移动平台前端 (3)
- Linux (44)
- FusionCharts (27)
- Json Jackson Xml (5)
- 方培工作室-微信开发 (0)
- Apache与Tomcat与IIS整合 (10)
- Nginx (17)
- webService (2)
- apache (4)
- lucene (3)
- lodop (2)
- Shiro (3)
- zTree (2)
- ireport (12)
- Servlet3.0 (5)
- 前端美工 (19)
- AngularJS (1)
- C#开发微信门户及应用 (0)
- Shell (3)
- bat脚本 (16)
- Bootstrap (26)
- Less (10)
- photoshop (6)
- Redis (6)
- Mongodb (10)
- MyBatis (3)
- 数据结构 (0)
- 读写分离-主从复制 (0)
- JFinal (0)
- 百度地图api (3)
- hadoop-hbase-hive-spark (3)
- WebStorm (2)
- Quartz (5)
- ios (0)
- Mina (8)
- Android Studio (4)
- Ratchet教程 (0)
- 移动端重构系列 (1)
- cubic-bezier贝塞尔曲线CSS3动画工具 (1)
- nginx+tomcat+memcached集群 (0)
- 集群 (0)
- ZooKeeper (3)
- Dubbo (0)
- vpn (0)
- kafka (0)
- JVM垃圾回收机制 (0)
- 微信小程序 (0)
- Lua (0)
- Hystrix (0)
- Vue.js (0)
- mycat (0)
- Openresty (0)
- springBoot (0)
- 新分类 (0)
- guava (0)
- 大数据 (0)
- Sentinel (0)
最新评论
-
JackMacing:
中文怎么解决?
SpringMVC与iReport(JasperReports) 5.6整合开发实例 -
18335864773:
用pageoffice把.可以实现在线的文档操作.直接转pdf ...
转:使用jasperreport动态生成pdf,excel,html -
linhao0907:
推荐一款轻量开源的支付宝组件:https://github.c ...
关于Alipay支付宝接口(Java版) -
songronghu:
太好了,非常有用,谢谢分享~
Java ConcurrentModificationException 异常分析与解决方案 -
wzwahl36:
http://www.atool.org/json2javab ...
Java下利用Jackson进行JSON解析和序列化
Spring对于多数据源,以数据库表为参照,大体上可以分成两大类情况:
一是,表级上的跨数据库。即,对于不同的数据库却有相同的表(表名和表结构完全相同)。
二是,非表级上的跨数据库。即,多个数据源不存在相同的表。
Spring2.x的版本中采用Proxy模式,就是我们在方案中实现一个虚拟的数据源,并且用它来封装数据源选择逻辑,这样就可以有效地将数据源选择逻辑从Client中分离出来。Client提供选择所需的上下文(因为这是Client所知道的),由虚拟的DataSource根据Client提供的上下文来实现数据源的选择。
具体的实现就是,虚拟的DataSource仅需继承AbstractRoutingDataSource实现determineCurrentLookupKey()在其中封装数据源的选择逻辑。
1. 数据源的名称常量类:
package com.test; public class DataSourceMap { public static final String TEST="test"; public static final String LJH="ljh"; }
2. 建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称
package com.test; public class CustomerContextHolder { private static final ThreadLocal<String> customer = new ThreadLocal<String>();// 线程本地环境 // 设置数据源类型 public static void setCustomerType(String customerType){ customer.set(customerType); } // 获取数据源类型 public static String getCustomerType(){ return customer.get(); } // 清除数据源类型 public static void remove(){ customer.remove(); } }
3. 建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方determineCurrentLookupKey,该方法返回一个Object,一般是返回字符串
package com.test; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource{ @Override protected Object determineCurrentLookupKey() { // 在进行DAO操作前,通过上下文环境变量,获得数据源的类型 return CustomerContextHolder.getCustomerType(); } }
4. 编写spring的配置文件配置多个数据源
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 数据源公共的内容 --> <bean id="abstractDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="root"></property> <property name="password" value="root"></property> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> </bean> <!-- 数据库ljh,继承abstractDataSource --> <bean id="ljhDataSource" parent="abstractDataSource" > <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ljh"> </property> </bean> <!-- 数据库test,继承abstractDataSource --> <bean id="testDataSource" parent="abstractDataSource" > <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"> </property> </bean> <!-- 配置多数据源映射关系,动态数据源类,注意,这个类必须继承AbstractRoutingDataSource --> <bean id="dataSource" class="com.test.DynamicDataSource"> <property name="targetDataSources"> <map> <entry key="ljh" value-ref="ljhDataSource"></entry> </map> </property> <property name="defaultTargetDataSource" ref="testDataSource"></property> </bean> <!-- sessionFactory的配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <!-- 实体类资源映射 --> <property name="mappingDirectoryLocations"> <list> <value>classpath:com/test</value> </list> </property> <!-- 为sessionFactory 配置Hibernate属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- 为dao配置sessionFactory --> <bean id="userDaoImpl" class="com.test.UserDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> </beans>
User类:
package com.test; public class User { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
user.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping> <class name="com.test.User" table="tuser"> <id name="id"> <generator class="native"></generator> </id> <property name="name" length="15"></property> </class> </hibernate-mapping>
Dao类
package com.test; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class UserDaoImpl extends HibernateDaoSupport{ public void save(User user){ this.getHibernateTemplate().save(user); } }
测试类
package com.test; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); CustomerContextHolder.setCustomerType(DataSourceMap.TEST); UserDaoImpl userDaoImpl = (UserDaoImpl)ctx.getBean("userDaoImpl"); User user = new User(); user.setName("test"); userDaoImpl.save(user); CustomerContextHolder.setCustomerType(DataSourceMap.LJH); user.setName("ljh"); userDaoImpl.save(user); CustomerContextHolder.remove(); } }
发表评论
-
spring boot整合mybatis+mybatis-plus
2019-02-08 23:58 0https://www.cnblogs.com/lia ... -
Spring点滴 Spring实战系列
2018-11-14 18:06 0https://www.cnblogs.com/si ... -
易百教程
2017-06-07 14:00 0http://www.yiibai.com/lua/l ... -
关于Spring Data redis几种对象序列化的比较
2016-09-06 15:01 0问题 最近在整一个spring data r ... -
spring 结合 Redis 例子,简单入门例子
2016-09-05 10:51 0http://oyhk.iteye.com/blog/ ... -
spring与redis集成之aop整合方案
2016-09-05 10:20 0http://blog.csdn.net/zhann ... -
Dubbo搭建例子
2016-09-03 17:35 0http://blog.csdn.net/lzxads ... -
集群部署服务和消费者测试(1)
2016-09-03 17:10 0修改dp和dc程序为注册到集群zookeeper中 ... -
zookeeper 服务器安装 单例和集群
2016-09-03 17:02 0http://blog.csdn.net/fangxi ... -
dubbo起步搭建Spring+SpringMVC+dubbo的开发环境
2016-09-03 16:49 0http://blog.csdn.net/fangxi ... -
Memcached与Spring AOP构建数分布式据库前端缓存框架
2016-09-02 22:19 0由于上一篇有介绍了Memcached缓存,并集群部 ... -
Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
2016-09-02 22:11 0原文链接:http://blog.csdn.net/cong ... -
重要,Spring注解事务无效 和 Cannot add foreign key constraint
2016-02-20 02:18 0Cannot add foreign key con ... -
Spring2.5.6中定时器Quarz的使用
2015-10-08 10:07 635下面说明详细的配置: applicationContext ... -
spring ioc原理(看完后大家可以自己写一个spring)
2015-08-07 14:43 0http://blog.csdn.net/it_ma ... -
Spring技术内幕——深入解析Spring架构与设计原理(二)AOP
2015-08-04 19:32 0http://jiwenke.iteye.com/ ... -
spring源码分析之——spring aop原理
2015-08-04 19:18 0aop是spring中非常有趣的一个功能。如果应用得当会大有 ... -
自我分析-Spring AOP
2015-08-04 19:13 0aop是spring中非常有趣的一个功能。如果应用得当会大有 ... -
利用AbstractRoutingDataSource实现动态数据源切换
2015-07-15 14:44 0利用AbstractRoutingDataSource实现 ... -
spring 使用AbstractRoutingDataSource自定义动态数据源时的事务处理
2015-07-15 14:38 0spring 使用AbstractRoutingDataSo ...
相关推荐
spring 配置多数据源
通过简单的demo实现SpingBoot多数据源配置并动态切换多数据源
spring数据源配置
spring 动态多数据源配置代码,本项目是maven项目,里面有完成的配资好的spring多数据源代码和配置文件。
请自行修改com/resources/datasource.properties中数据库配置,Demo中配置的两个数据源,一个是Mysql,一个是Oracle。 运行之前请自行建立数据库的表。
主要介绍了Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程,需要的朋友可以参考下
一个springboot的多数据配置,从mapper到controller完整的一个业务流程
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
mybatis+spring实现动态切换数据源,修改数据源配置信息之后,直接运行test可进行测试
主要介绍了通过Spring Boot配置动态数据源访问多个数据库的实现代码,需要的朋友可以参考下
Spring Boot使用spring-data-jpa配置Mysql多数据源,可用版本
spring配置JNDI数据源
spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码。代码拿过去即可集成使用。
Springcloud 多数库 多数据源整合,查询动态切换数据库
Spring多数据源配置,支持mysql、oracle等多个数据源同时存在的情况
连接MYSQL数据库,SPRING配置文件示例。
在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...
spring boot配置主动数据源,数据库使用mysql+oracle+mybatis
1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)
基于注解的Spring多数据源配置和使用 前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备。由于之前做过的项目都是单数据源的,没有遇到这种场景,...