1、准备工作
我的项目是struts2+spring+hibernate架构,web服务用tomcat;
现在遇到的问题是要连接多个数据库一个Oracle一个SqlServer,现在把我配置过程分享给大家!
使用jta事务,用tomcat+jotm提供事务管理器
请先下载相应的jotm的jar包,放到工程中的lib包中
2、配置hibernate配置文件,有几个数据库就配几个这样的文件
我的配sqlserver数据库的文件如下:
例如:hibernate_sqlserver.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">jdbc:microsoft:sqlserver://192.168.0.100:1433;DatabaseName=PrisonSoftWeb1
</property>
<property name="dialect">org.hibernate.dialect.SQLServerDialect
</property>
<property name="myeclipse.connection.profile">test</property>
<property name="connection.password">server</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver
</property>
</session-factory>
<hibernate-configuration>
其他数据库和其类似!
3、配置sping::applicationContext.xml中添加相应的session工厂
(1)以下两个bean用于spring对jotm初始化
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction"><ref local="jotm"/></property>
</bean>
如果您的程序中要处理blob类型的数据就添加如下信息:
<!-- blob 处理 -->
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor"/>
</property>
</bean>
以下信息为开发中依据实际情况,程序员或者设计人员添加的内容:
(2)添加session工厂(session工厂的添加注意,必须有一个工厂的id=“sessionFactory”)
<!-- oracle 数据库sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.current_session_context_class">jta</prop>
<prop key="hibernate.connection.release_mode">after_statement</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.order_updates">true</prop>
</props>
</property>
<!-- 为处理Blob类型字段的句柄声明 -->
<property name="lobHandler">
<ref local="lobHandler"/>
</property><!--这就是上面声明的句柄-->
<property name="jtaTransactionManager">
<ref bean="jotm" />
</property>
</bean>
<!-- sqlserver 数据库sessionFactory -->
<bean id="sessionFactoryForSqlServer" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate_SqlServer.cfg.xml">
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="jtaTransactionManager">
<ref bean="jotm" />
</property>
</bean>
(3)为dao注入对应的session工厂
<bean id="sqlServerbaseDao" class="com.gkzx.dao.BaseDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactoryForSqlServer" />
</property>
</bean>
4、手动提交:Dao实现中采用手动提交和回滚事务的办法,避免数据库因事务不能及时提交而引起死锁现象
this.getSession().clear();
Transaction tx = null;
try{
tx = this.getSessionFactory().getCurrentSession().beginTransaction();
//这里写你的操作数据库的代码:例如:
this.getHibernateTemplate().update(objBean);
tx.commit();
}catch(RuntimeException e){
if(tx != null)tx.rollback();
throw e;
}finally{
//this.getSession().close();
}
分享到:
相关推荐
当项目涉及到多个数据源时,如业务数据、审计数据分别存储在不同的数据库中,就需要进行多数据源的整合。本示例将探讨如何在Spring和Hibernate环境中实现多数据源的配置与管理。 首先,我们来看标题"Spring+...
为了操作多个数据库,需要在Spring配置文件中配置多个数据源,并为每个数据源配置相应的SessionFactory。这时会遇到如何区分和管理不同数据源下的SessionFactory的问题。 知识点四:使用GoF装饰器模式 为了更好的...
2. **配置事务管理器**:由于存在多个数据源,我们需要为每个数据源创建一个PlatformTransactionManager。Spring Boot 2支持自动配置,只需添加对应的`@EnableTransactionManagement`和`@Transactional`注解。 3. *...
综上所述,"spring集合hibernate多数据切换"这个知识点涉及到Spring框架的IoC容器、AOP、事务管理,以及Hibernate的SessionFactory配置等多个方面。通过理解并实践这些内容,开发者能够构建出更灵活、可扩展的企业级...
"spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...
在Spring框架中,多数据源事务管理是一项关键任务,特别是在大型企业级应用中,往往需要同时操作多个数据库。本篇文章将聚焦于如何结合Spring和JOTM(Java Open Transaction Manager)来实现多数据源的事务管理,...
在多数据源环境中,Hibernate可以通过SessionFactory配置多个数据源,每个数据源对应一个SessionFactory。 3. **Atomikos**: Atomikos是一个开源的JTA(Java Transaction API)实现,提供分布式事务管理服务。在...
在分布式环境中,Atomikos可以帮助协调跨多个数据源的事务,确保ACID(原子性、一致性、隔离性和持久性)属性得以维护。它支持多种持久化存储,如JDBC、JMS等,与Spring的集成也十分便捷。 **多数据源事务管理**: ...
Atomikos3.3支持分布式事务,能够在多个数据源之间协调事务,确保ACID(原子性、一致性、隔离性和持久性)特性。 在集成Atomikos到Spring和Hibernate的环境中,你需要配置Atomikos的相关属性,如`transactions....
1. **配置事务管理器**: 在Spring配置文件中定义`PlatformTransactionManager`,如`HibernateTransactionManager`,与数据源关联。 2. **@Transactional注解**: 在需要事务的方法上添加`@Transactional`注解,声明...
4. **MyBatis配置**:配置多个数据源的SqlSessionFactory,以及Mapper接口和XML映射文件。 5. **业务逻辑代码**:在服务层或DAO层,通过Spring的@Autowired注解或自定义数据源选择器来切换使用不同的数据源。 6. *...
对于多数据源,我们需要创建多个数据源配置,例如: ```yaml spring: datasource: primary: url: jdbc:mysql://localhost:3306/main_db username: root password: password driver-class-name: ...
在事务管理方面,Spring支持编程式和声明式事务,可以处理单个数据库的本地事务,以及跨多个数据源的分布式事务。 `Druid` 是阿里巴巴开源的一个高性能、可扩展的数据源连接池。它除了提供基础的连接池功能外,还...
1. 创建Spring的上下文配置文件,例如`applicationContext.xml`,配置数据源、SessionFactory、事务管理器等。 2. 创建Spring MVC的配置文件,如`servlet-context.xml`,配置DispatcherServlet、视图解析器、模型-...
- **配置文件**:`applicationContext.xml`是Spring的配置文件,其中会配置数据源、Hibernate SessionFactory、事务管理器等。这里可能会使用`PlatformTransactionManager`接口的实现,如`JtaTransactionManager`,...
7. **事务属性**:`@Transactional`注解有多个属性,如`propagation`(事务传播行为)、`isolation`(隔离级别)、`readOnly`(只读事务)、`rollbackFor`和`noRollbackFor`(指定异常类型触发或不触发回滚)。...
Spring 和 Hibernate 是两个非常重要的Java开发框架,它们在企业级应用开发中占据着核心地位。Spring 是一个全面的后端应用程序框架,而Hibernate 是一个对象关系映射(ORM)工具,用于简化数据库交互。 1. **...
这个库可能包含了Spring的IoC容器、Hibernate的实体管理以及两者间的集成配置,使得开发者无需单独导入Spring和Hibernate的多个jar文件,减少了项目的依赖复杂性。 描述中提到的下载经历,反映了在开发过程中寻找...
这一步是实现Spring的事务管理功能,确保数据操作的原子性和一致性。 在业务层,可以使用Spring的@Autowired注解来自动注入需要的Service或DAO,这些Service和DAO通常会使用HibernateTemplate进行数据库操作。通过...
在多数据源环境下,可以通过SessionFactory和Session接口配置多个数据源,每个数据源对应一个SessionFactory,以处理不同数据库的连接。 Maven是项目管理工具,它帮助开发者管理项目的构建、依赖和生命周期。在多库...