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、Struts2和Hibernate3这三大经典Java EE框架,实现了数据源的灵活配置和动态切换。 首先,Spring作为Java应用中...
在应用程序运行过程中,可以根据需要动态地切换数据源,这可能涉及到会话工厂中数据库连接的切换。 知识点八:数据源的注册与注入 最后,为了能够使Spring容器管理和注入这些配置好的数据源,需要在Spring的配置...
总结,这个示例展示了如何在Spring Boot 2.0中配置多数据源,使用Hibernate作为ORM工具,以及如何在DAO层通过`HibernateDaoSupport`进行数据操作,并在业务逻辑中灵活地切换数据源。这有助于实现更复杂的数据库访问...
Spring提供了AbstractRoutingDataSource类,允许我们根据某种规则(如事务、请求上下文等)动态切换数据源。我们需要扩展这个类,并实现determineCurrentLookupKey方法来决定当前应该使用哪个数据源。 接着,描述中...
本知识点主要探讨如何在Spring中集成Hibernate来实现多数据源的动态切换功能,这对于需要处理多种数据源的应用来说至关重要。 首先,我们需要理解什么是多数据源。多数据源意味着一个应用程序可以连接并操作多个...
SSH动态切换数据源是一种在Java Web开发中处理多数据库连接切换的技术,主要应用于Spring、Struts和Hibernate(SSH)这三大框架集成的项目。SSH框架是企业级应用开发的常用组合,提供了强大的业务逻辑处理和数据持久...
在Spring配置文件中,我们可以通过配置`AbstractRoutingDataSource`类来实现动态数据源切换。这个类可以根据一定的规则动态选择数据源。例如: ```xml <bean id="dataSource" class="org.springframework.jdbc....
为了实现动态切换,我们不能直接硬编码这些配置,而是应该将它们作为可配置参数,例如从外部配置文件或者系统环境变量中读取。 1. **创建可配置的数据库连接信息** - 使用properties文件:创建一个名为`database....
在多数据源场景下,Hibernate可以配置为连接不同的数据库,使得应用可以根据业务需求灵活切换数据源。 **多数据源** 是指在一个应用中管理多个独立的数据库连接。在本项目中,数据源被配置为Hibernate和Datastore,...
Hibernate 多数据库配置 在 Hibernate 中配置多数据库,并自由切换,可以使用 Spring 框架来实现。...使用 Spring 框架和 Hibernate,我们可以轻松地配置多数据库连接信息,并自由切换不同的数据源。
通过Spring的管理,可以轻松地在不同层次之间切换数据访问策略,如JDBC、MyBatis或JPA,增强了系统的灵活性和可扩展性。 总结,Hibernate与Spring的整合是Java开发中的常见实践,它将ORM的强大功能与Spring的全面...
【Spring 动态数据源切换】使用 `AbstractRoutingDataSource` 的详细实现在处理多数据库环境时,Spring 提供了一个强大的工具 `AbstractRoutingDataSource`,它允许我们根据特定条件动态地切换数据源。本文将深入...
"Spring3+Hibernate4+Maven+JUnit 多库多数据源实现"是一个典型的Java Web项目配置,它涉及了多个核心技术来处理复杂的数据管理需求。下面将详细阐述这些技术以及如何协同工作以实现多库多数据源。 首先,Spring...
在需要切换数据源时,只需要改变SessionFactory的引用即可。 MyBatis,另一种流行的持久层框架,相比Hibernate更加轻量级,它提供了SQL语句的直接编写和执行。在多数据源环境中,MyBatis的配置文件需要包含多个数据...
为了解决上述问题,本文将介绍一种利用Spring框架结合Decorator设计模式来实现多数据源动态切换的方法。 #### 解决方案设计 ##### 1. 设计思路 - **多数据源配置**:在Spring的`applicationContext`中配置所有的...
3. **数据源切换**:在代码中,可能需要根据业务逻辑动态切换数据源。这可以通过AOP(面向切面编程)或Spring的`@Transactional`注解配合自定义事务管理器来实现。也可以创建一个路由数据源(如`...
在SpringMVC项目中,我们可以通过Spring的`AbstractRoutingDataSource`类来实现动态切换数据源的功能。这个类允许我们在运行时根据特定条件(如事务、业务逻辑等)选择要使用的数据源。 1. **创建数据源bean** 为...
在这个项目中,Spring被用来管理数据源,通过配置不同的数据源,可以实现在运行时动态切换。 其次,Hibernate是一个流行的ORM(Object-Relational Mapping)框架,它允许开发者以面向对象的方式操作数据库,而无需...
2. 配置多数据源路由:SpringBoot提供了AbstractRoutingDataSource,可以根据业务逻辑动态切换数据源。例如,可以通过事务的隔离级别、方法的注解等方式决定使用哪个数据源。 3. 实现DAO层:在Hibernate的实体类和...
2. 配置Spring:定义DataSource、SessionFactory(对于Hibernate)和SqlSessionFactory(对于Ibatis)的bean,配置数据源、事务管理器等。 3. 配置Hibernate:创建Hibernate的实体类,编写对应的映射文件,设置...