Hibernate结合Spring配置可动态切换的数据源,具体配置如下:
(1)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" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- 数据源配置 --> <bean id="databaseServer1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/database1" /> <property name="username" value="username" /> <property name="password" value="password" /> </bean> <bean id="databaseServer2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/database2" /> <property name="username" value="username" /> <property name="password" value="password" /> </bean> <bean id="databaseServer3" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/database3" /> <property name="username" value="username" /> <property name="password" value="password" /> </bean> <bean id="databaseCenter" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/database_center" /> <property name="username" value="username" /> <property name="password" value="password" /> </bean> <!-- 编写spring 配置文件的配置多数源映射关系 --> <bean id="databaseSource" class="com.ibsrapp.database.datasource.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry key="APPSERVER1" value-ref="databaseServer1"></entry> <entry key="APPSERVER2" value-ref="databaseServer2"></entry> <entry key="APPSERVER3" value-ref="databaseServer3"></entry> <entry key="APPCENTER" value-ref="databaseCenter"></entry> </map> </property> <property name="defaultTargetDataSource" ref="databaseServer1"> </property> </bean> <!--Ibsrapp数据库会话工厂配置 --> <bean id="databaseSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="databaseSource"/> <property name="mappingResources"> <list> <value>com/ibsrapp/domain/dbtable.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.format_sql">false</prop> <prop key="hibernate.hbm2ddl.auto">true</prop> <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop> <!-- 最大连接数 --> <prop key="hibernate.c3p0.max_size">30</prop> <!-- 最小连接数 --> <prop key="hibernate.c3p0.min_size">5</prop> <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 --> <!-- <prop key="hibernate.c3p0.timeout">60000</prop> --> <!-- 最大的PreparedStatement的数量 --> <prop key="hibernate.c3p0.max_statements">100</prop> <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒--> <prop key="hibernate.c3p0.idle_test_period">120</prop> <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 --> <prop key="hibernate.c3p0.acquire_increment">2</prop> <!-- 每次都验证连接是否可用 --> <prop key="hibernate.c3p0.validate">true</prop> </props> </property> </bean> <!-- database的template --> <bean id="databaseHibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="databaseSessionFactory" /> </property> </bean> <bean id="databaseHibernateDao" class="com.ibsrapp.database.persistent.dao.impl.IbsrappHibernateDaoImol"> <property name="hibernateTemplate" ref="databaseHibernateTemplate" /> <property name="template" ref="databaseHibernateTemplate" /> </bean> <bean id="databaseJdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="databaseSource" /> </bean> <bean id="databaseJdbcDao" class="com.ibsrapp.database.persistent.dao.impl.IbsrappJdbcDaoImpl"> <property name="jdbcTemplate" ref="databaseJdbcTemplate" /> <property name="template" ref="databaseJdbcTemplate"/> </bean> <bean id="databaseJDBCCommonDao" class="com.ibsrapp.database.persistent.dao.IbsrappJDBCCommonDao"> <property name="sessionFactory"> <ref bean="databaseSessionFactory" /> </property> </bean> </beans>
(2)涉及的Class
public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DynamicDataSourceHolder.getDataSourceType(); } /** * (non-Javadoc) * @see javax.sql.CommonDataSource#getParentLogger() */ public Logger getParentLogger() throws SQLFeatureNotSupportedException { // TODO Auto-generated method stub return null; } }
public class DynamicDataSourceHolder { // 线程本地环境 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(); } }
(3)切换相关代码
DynamicDataSourceHolder.setDataSourceType("APPSERVER1");
这里要使用的就是spring配置文件中所配置的key的字符串。
相关推荐
spring 3.29+struts2.3.15.1+hibernate3 动态切换数据源
spring 集成hibernate实现多数据的动态切换功能,有详细的代码 可以参考 基于maven工程
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。 此项目就是为了解决这个问题。
以及动态数据源的切换! 最新新增了ehcache缓存的应用 TestSpringWithoutMaven 使用导入包的方法构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理...
一套Spring+Hibernate的多个数据库切换的源码,导入eclipse里,加入相关的包就能运行。
使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用
第3~9行定义了一个数据源,其实现类是apache的BasicDataSource,第11~25行定义了Hibernate的会话工厂,会话工厂类用Spring提供的LocalSessionFactoryBean维护,它注入了数据源和资源映射文件,此外还通过一些键值...
Uncode-DAL是 Java 通用数据访问组件,基于mybatis、spring jdbc、hibernate等ORM框架开发,同时支持基于多数据源的读写分离、主备切换、故障转移,自动恢复、负载均衡、缓存等。可以大大提高开发速度
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》所涉及的源代码 布衣暖,菜根香,好书滋味长!清华大学出版社长期以来一直秉承为读者多出好书的宗旨,多年来为读者奉献了大量脍炙人口的精品图书...
5.10 多数据源的应用 338 5.11 jdbc的应用 343 5.12 hibernate调用存储过程 343 5.13 xml数据持久化 346 5.14 小结 348 第6章 充分利用spring 2.5的ioc利器统管bean世界 349 6.1 java程序员的春天厚礼—spring...
《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》所涉及的源代码 布衣暖,菜根香,好书滋味长!清华大学出版社长期以来一直秉承为读者多出好书的宗旨,多年来为读者奉献了大量脍炙人口的精品...
该组件支持多数据源配置,能够实现读写分离、主备切换、故障转移以及自动恢复机制,同时集成负载均衡和缓存策略,大幅提升数据处理性能和系统稳定性。 技术构成: - 主要编程语言:Java - 文件构成:共213个文件,...
第一章 安装配置开发环境 18 1.1系统需求 18 1.2 JDK 的下载,安装和配置(可...10.7.2 MyEclipse生成的Spring+Hibernate无法保存数据问题的解决方法2 - 用 CGLIB 来实现事务管理 258 10.7.3 Spring相关的参考资料 261
实现基于多数据源(datasource)的读写分离、主备切换、故障转移、恢复检测和负载均衡 使用该组件必须遵循以下规则: 在使用DTO时,字段名称与数据库表字段一致,也可以不使用任何DTO类。 不支持连表查询,主要是单表...
以及基于这些技术的商业化应用程序的开发技巧,在讲解过程中以目前最为流行的开发工具MyEclipse为载体,全面系统地介绍了如何在MyEclipse中开发基于Struts、Hibernate、Spring等主流框架的各种Java应用程序。...
Uncode-DAL是 Java 通用数据访问组件,基于mybatis、spring jdbc、hibernate等ORM框架开发,同时支持基于多数据源的读写分离、主备切换、故障转移,自动恢复、负载均衡、缓存等。可以大大提高开发速度。
Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...