- 浏览: 1316973 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
Spring2.0.1以后的版本已经支持配置多数据源,并且可以在运行的时候动态加载不同的数据源。通过继承 AbstractRoutingDataSource就可以实现多数据源的动态转换。目前做的项目就是需要访问12个数据源,每个数据源的表结构都是相同的,所以要求数据源的变动对于编码人员来说是透明,也就是说同样SQL语句在不同的环境下操作的数据库是不一样的。具体的配置如下:
一、首先需要写一个静态的键值对照类: Java代码
package cn.com.xinli.ccp.dynamicds; public class DataSourceMap { public static final String Admin="Admin"; public static final String Yxh = "Yxh"; }
这个类主要在使用的时候当作获得数据源的标志使用。 Java代码
package cn.com.xinli.ccp.dynamicds; public class CustomerContextHolder { private static final ThreadLocal contextHolder = new ThreadLocal(); public static void setCustomerType(String customerType) { contextHolder.set(customerType); } public static String getCustomerType() { return (String) contextHolder.get(); } public static void clearCustomerType() { contextHolder.remove(); } }
三、建立动态数据源类,这个类必须继承AbstractRoutingDataSource:
Java代码
package cn.com.xinli.ccp.dynamicds;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
return CustomerContextHolder.getCustomerType();
}
}
这个类实现了determineCurrentLookupKey方法,该方法返回一个Object,一般是返回字符串,也可以是枚举类型。该方法中直接使用了CustomerContextHolder.getCustomerType()方法获得上下文环境并直接返回。
四、编写spring的配置文件配置数据源
Java代码
<bean id="parentDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>COM.ibm.db2.jdbc.net.DB2Driver</value>
</property>
<property name="url">
<value>jdbc:db2:127.0.0.1:TEST</value>
</property>
</bean>
<bean id="adminDataSource" parent="parentDataSource">
<property name="username" value="admin"/>
<property name="password" value="master997mb"/>
</bean>
<bean id="yxhDataSource" parent="parentDataSource">
<property name="username" value="yxh"/>
<property name="password" value="yxh"/>
</bean>
在这个配置中可以看到首先有个parentDataSource,这个主要配置一些数据源的公用信息,项目中都是链接DB2数据库;adminDataSource和yxhDataSource是根据不同需要配置的个性化信息,但都必须加parent属性,值为 parentDataSource。这样就配置好了2个数据源信息。当然如果链接的多数据源是不同类型的两个数据库,那么 parentDataSource就可以不要了,直接配置两个不同的数据源链接就可以了。
五、编写spring配置文件配置多数据源映射关系
Java代码
<bean id="dataSource" class="cn.com.xinli.ccp.dynamicds.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry key="Yxh" value-ref="yxhDataSource"/> </map> </property> <property name="defaultTargetDataSource" ref="adminDataSource"/> </bean>
在这个配置中第一个property属性配置目标数据源,<map key-type="java.lang.String">中的key-type必须要和静态键值对照类DataSourceMap中的值的类型相同;<entry key="Yxh" value-ref="yxhDataSource"/>中key的值必须要和静态键值对照类中的值相同,如果有多个值,可以配置多个< entry>标签。第二个property属性配置默认的数据源。
六、配置hibernate。
Hibernate的配置和普通的hibernate、spring结合的配置一样
Java代码
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- to override, use the "SpringDatasourceConfig" snippet in your project --> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <list> <value> cn/com/xinli/ccp/entity/User.hbm.xml </value> <value> cn/com/xinli/ccp/entity/Test.hbm.xml </value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.DB2Dialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.use_outer_join">true</prop> <prop key="hibernate.jdbc.batch_size">50</prop> <prop key="hibernate.jdbc.fetch_size">5</prop> <prop key="hibernate.connection.pool_size">2</prop> <prop key="hibernate.connection.autocommit">false</prop> <prop key="hibernate.cache.use_query_cache">false</prop> <prop key="hibernate.max_fetch_depth">1</prop> <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop> </props> </property> </bean> <bean id="mydao" class="cn.com.xinli.ccp.dao.HibernateBaseDao"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean>
关于dao的代码这里就省略了。 Java代码
public class DaoTest extends TestCase { public void testSave() throws Exception{ CustomerContextHolder.setCustomerType(DataSourceMap.Admin);//设置数据源 //hibernate创建实体 Test test = new Test(); test.setTest("22222222"); mydao.save(test);//使用dao保存实体 CustomerContextHolder.setCustomerType(DataSourceMap.Yxh);//设置为另一个数据源 mydao.save(test);//使用dao保存实体到另一个库中 } }
在项目中对于编码人员对多数据源的切换可以做成透明的,操作同样的dao,就可以访问不同的数据库了。
发表评论
-
aop:aspect
2011-03-31 11:01 5035package com.albert.spring.proxy ... -
spring包详解
2011-01-27 17:15 1316spring.jar是包含有完整发布的单个jar包,sprin ... -
hibernate部分字段更新的解决方案
2010-12-06 16:33 6712在调用Hibernate的update方法时会更新对象的全部字 ... -
spring 读取applicationContext方式
2010-11-26 14:08 3697加载器目前有两种选择:ContextLoaderListene ... -
spring mvc 流程
2010-11-19 10:00 1725对于流程网上有以下解释: 它的处理流程是这样的: g ... -
Acegi Security -- Spring下最优秀的安全系统
2010-11-11 10:12 1958一 Acegi安全系统介 ... -
spring security 同步session控制
2010-11-05 09:50 3508如果你希望限制单个用户只能登录到你的程序一次,Spring ... -
Spring HTTP invoker简介
2010-10-26 21:22 9003核心提示:Spring HTTP invoker简介 Sp ... -
Spring 国际化的支持:Spring MVC Velocity
2010-10-26 21:19 7509核心提示:在Spring的国际化配置中,一共有三种描述方式 ... -
spring 配置多数据源
2010-10-25 20:52 3128Spring2.0.1以后的版本已经支持配置多数据源,并且可以 ... -
Spring多数据源解决方案
2010-10-25 20:29 6600在很多大型应用中都会对数据进行切分,并且采用多个数据库实例进行 ... -
Spring多数据源解决方案(研究,不确信是正确)
2010-10-25 20:25 2739开发目的:一个协同平台项目,多托管用户,单门户系统,每个托管用 ... -
在spring security3上实现验证码
2010-10-14 12:43 4245关于验证码的实现 验证码的例子现在多如牛毛,大家google ... -
spring javamail
2010-01-07 11:50 3429一直以来都是用javax.mail来写email发送,看了sp ...
相关推荐
spring boot 2多数据源,里面有hibernate和mybatis的多数据源代码。代码拿过去即可集成使用。
springboot2.0多数据源集成hibernate配置hibernateDaoSupport, dao层继承hibernateDaoSupport, 不使用jpa方式。
该配置文件连接的是两个数据库结构相同的数据源,其他比如数据库结构不原理也可行。本人在遇到此问题时上网搜了很多答案结果都不怎么如意,有的太深奥不过思想很好,有的又太不给力,后来自己慢慢研究配置成功后想与...
Spring+Hibernate多数据源的整合实现demo
Spring多数据源配置_分布式数据 Tomcat服务器下的多数据源配置详情 一、环境及框架 Tomcat+spring+hibernate+jotm,还有就是struts、Oracle等 二、需求说明 系统里有2套不同网域的oracle数据库,之间的数据需要进行...
实现了spring3+springmvc+jpa2.0之间的集成,采用多数据源实现jpa,本例子提供的数据源为hibernate何datastore,为需要的朋友省去搭建框架的时间
spring+hibernate解决多数据源问题3.pdf
spring 3.2+ hibernate 3.* +atomikos3.9 配置多数据源 包含所有jar包和源代码,完整项目
spring 3.29+struts2.3.15.1+hibernate3 动态切换数据源
spring 集成hibernate实现多数据的动态切换功能,有详细的代码 可以参考 基于maven工程
spring+hibernate+atomikos实现多数据源分布式事务管理
这是本人上课过程中为学生讲解hibernate、spring和mysql开发简单项目的截图汇集,大家需要先自己完成数据库以及JDBC数据源的配置,之后按照该截图的顺序就能完成一个最简单的支持数据库事务处理的SH系统,(如果使用...
spring3+hibernate4+maven+junit 多库多数据源实现,非常好的一个学习多数据分点管理,分别连接不同类型数据源的方法
多数据源配置demo,配置Spring+Hibernate多数据源整合,
Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源,分别向两个不同的数据里面插入数据同时失败和成功,调用接口方式原理一样。
(1)该项目是基于spring3+struts2+hibernate3+spring security3的权限管理项目 (2)后台我已经实现了权限管理,包括用户,角色和资源的分配。前台实现了spring security3的管理 (3)网上案例普遍是后台单一登陆。...
博文链接:https://wxinpeng.iteye.com/blog/203088
spring+jotm 多数据源事务管理(二)hibernate 使用hibernate关联jotm也很方便,先看一个没有使用jotm的例子:
部门人员一对多的CRUD操作 hibernate: 管理实体...spring:数据源配置与获得session IOC依赖注入 和 AOP 事务管理 jsf : backing bean的操作 jsf 标签应用 jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。 此项目就是为了解决这个问题。