采用这种方式的配置时,其配置文件的增加非常快,每个bean 有需要两个bean 配
置一个目标,另外还需要使用TransactionProxyFactoryBean 配置一个代理bean 。
<?xml version="1.0" encoding="gb2312"?>
<'一Spring 配置文件的文件头,包含DTD 等信息->
<!DOCTYPE beans PUBL工C "-//SPRING//DTD BEAN//EN"
''http://www.springframework.org/dtd/spring-beans.dtd''>
<beans>
<!一定义数据源>
<bead id="dataSource" class="org.springframework.jdbc.datasource.
DriverManagerDataSource">
<!一定义数据库驱动-->
<property name="driverClassName"><value>com.mysql.jdbc.Driver</
value></property>
<! 定义数据库url-->
<property name="url"><value>jdbc:mysql://localhost:3306/spring</
value></property>
<!一定义数据库用户名>
<property name="username"><value>root</value></property>
<1-- 定义数据库密码一〉
<property name="password"><value>32147</value></property>
</bean>
<' 定义一个hibernate 的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.
LocalSessionFactoryBean">
<!一定义SessionFactory必须注入DataSource-->
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<list>
<1--以下用来列出所有的PO 映射文件一〉
<value>Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!一此处用来定义hibernate 的SessionFactory的属性:
不同数据库连接启动时选择create.update.create-drop-->
<prop key="hibernate.dialect">org.hibernate.dialect.
MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!一定义事务管理器,适用于Hibernte 的事务管理器一〉
<bean 工d="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactihoManager">
<!-- HibernateTransactiohManager bean 需要依赖注入一个
SessionFactory bean 的引用-->
<property name="sessionFactory"><ref local="sessionFactory"/></
property>
</bea口〉
<!一定义DAO Bean ,作为事务代理的目标一〉
<bean id="personDaoTarget" class="lee.PersonDaoHibernate">
<!一为DAO bean 注入SessionFactory引用一〉
<property name="sessionFactory"><ref local="sessionFactory"/></
property>
</bead>
<!一定义DAO bean 的事务代理>
<bean id="personDao" class="org.spr工ngframework.transaction.interceptor.
TransactionProxyFactoryBean">
<!一为事务代理bean 注入事务管理器一〉
<property name="tra口sactionManager"><ref bean="transactionManager"
/></property>
<' 设置事务属性>
<property name="transactionAttributes">
<props>
<!-- 所有以f 工口d 开头的方法,采用required 的事务策略,并且只--〉
<prop key="find食">PROPAGATION_REQU工RED , readOnly</prop>
<!-- 其他方法,采用required 的事务策略->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<'一为事务代理bean 设置目标bean 一〉
<property name="target">
<ref local="personDaoTarget"/>
</property>
</bean>
</beans>
在上面的配置文件中,personDao 需要配置两个部分:一个是personDao 的目标bean ,
该目标bean 是实际DAO bean,以实际的DAO bean 为目标,建立事务代理;另一个是
组件,需要一个目标bean 和一个事务代理来组成。
但这种配置方式还有一个缺点:目标bean 直接暴露在Spring 容器中,可以直接引
用,如果目标bean 被误引用,将导致业务操作不具备事务性。
为了避免这种现象,可将目标bean 配置成嵌套bean , ~面是目标bean 和事务代理
的配置代码:
<! 定义DAO bean 的事务代理一〉
<bean id="personDao" class="org.springframework.transaction.interceptor.
TransactionProxyFactoryBean">
<!一为事务代理bean 注入事务管理器>
<property name=" transactionManager" ><ref bea口="transactionManager"/
></property>
<!一设置事务属性>
<property name="transactionAttributes">
<props>
<!-- 所有以find 开头的方法,采用required 的事务策略,并且只读一〉
<prop key="find*">PROPAGAT工ON_REQUIRED, readOnly</prop>
<! 其他方法,采用required 的事务策略->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
<!一为事务代理bean 设置目标bean -->
<property name="target">
<' 采用嵌套bean 配置目标bean-->
<bean class="lee.PersonDaoH工bernate">
<!一为DAO bean 注入SessionFactory引用一〉
<property 口ame="sess工onFactory"><ref local="sessionFactory"
/></property>
</bean>
</property>
</bead〉
分享到:
相关推荐
CHI协议,transaction事务汇总: 1.部分事务分为ptl/full ,这里不做区分。 2.事务名基本可以“望文生义”,也就是我们代码所推荐的“命名即注释”。 3.部分事务的行为并不完全确定,个人推测。 4.针对request type...
根据提供的文件信息,可以提炼出以下与“Principles of transaction processing”相关的知识点: 1. 事务处理的原理 事务处理系统是计算机系统的一个重要组成部分,它涉及到如何高效、安全地处理各种事务。事务处理...
- 事务管理器(Transaction Manager):在Spring Boot中,如果检测到JPA或Hibernate,将会自动配置一个`PlatformTransactionManager`实例。 2. **JPA集成** - JPA是Java提供的ORM(Object-Relational Mapping)...
在这个"TCC-Transaction分布式事务DEMO"项目中,开发者已经实现了一个可运行的示例,展示了如何在Maven项目中集成TCC模式,并利用Mysql数据库进行分布式事务的处理。通过分析和学习这个DEMO,我们可以更好地理解TCC...
-- 此处可增加其他需要自动创建事务代理的bean --> <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器 --> <value>transactionInterceptor ``` #### 五、总结 通过本文的介绍,我们可以看到...
内容概述:SQL Server数据库相关内容,对应张磊著《SQL Server数据库应用技术项目化教程》中166页(3)ROLLBACK TRANSACTION将显式事务或隐式事务回滚到事务的结束所对应的源码。代码经个人运行后无误,如果下载后运行...
在深入探讨Spring事务代理配置之前,我们先简要回顾一下Spring框架的核心概念。Spring是一个开源的Java平台,它提供了一套全面的编程和配置模型,主要用于简化企业级应用的开发。其中,依赖注入(Dependency ...
在Hyperf中实现TCC分布式事务,可以充分利用其异步非阻塞的优势,提高系统的并发处理能力。 TCC事务模型的核心思想是将一个复杂的业务操作拆分为一系列细粒度的尝试、确认和取消操作。每个操作都是一个TCC服务,...
在 Laravel 框架中,`DB::transaction()` 是用于执行数据库事务的一种便捷方式,它确保在一组数据库操作中,所有操作要么全部成功,要么全部失败。然而,在处理多数据库环境时,可能会遇到 `DB::transaction()` 事务...
本文将深入探讨如何在Spring框架中使用`TransactionProxyFactoryBean`来实现声明式事务代理配置。 #### 声明式事务管理概述 声明式事务管理通过在配置文件或注解中定义事务边界,而不是在业务代码中显式地管理事务...
C# 执行Transaction事务的一般例子,创建SqlTransaction 对象并用SqlConnection对象的BeginTransaction()方法开始事务,将Transaction属性设置为上面所生成的SqlTransaction对象。 运行环境:Visual Studio2010
声明式事务管理依赖于Spring的AOP机制,它可以在不修改业务代码的情况下,通过代理对象拦截方法调用,实现事务的自动控制。AOP允许我们定义“切面”(Aspect),即关注点的模块化,如事务管理就是一个典型的横切...
根据给定的信息,本文将详细解析“transaction事务”这一核心概念及其在数据库操作中的应用,特别是结合提供的代码示例来探讨事务处理的具体实现方法。 ### 一、事务(Transaction)的基本概念 事务是数据库中一系列...
2. Transaction Proxy:Spring提供了一种基于代理的事务管理方式,即在目标对象的方法执行前后自动开启和提交事务。当方法抛出未检查异常(继承自RuntimeException的异常)时,事务会自动回滚;如果抛出受检异常(非...
1. **开启事务**:使用`BEGIN TRANSACTION`语句开启一个事务。这标志着事务的开始,所有的SQL操作将在同一个事务中执行,直到事务被提交或回滚。 ```sql begin transaction ``` 2. **执行SQL操作**:在开启事务后...
内容概述:SQL Server数据库相关内容,对应张磊著《SQL Server数据库应用技术项目化教程》中166页(4)SAVE TRANSACTION用于在事务内设置保存点所对应的源码。代码经个人运行后无误,如果下载后运行有误请检查数据库...
【javax.transaction.jar】是Java平台上的一个核心组件,主要用于处理分布式环境中的事务管理。这个库包含了一组接口和类,这些接口和类定义了事务管理的API,使得开发者能够在Java应用程序中实现事务处理的规范。在...
难道只要数据库连接才支持事务?答案肯定不是,因为COM+同样支持事务,一般的对象要支持事务需要怎样处理? 自行实现所有细节,比如说银行的提款机模拟,在Withdraw的代码中检查支取金额后的余额或者检查支取金额的...
- **示例**:假设有一个`Transaction1`事务,在该事务内的另一个方法调用(如`Transaction2`)将加入`Transaction1`,而不会开启新的事务。如果`Transaction1`不存在,则会为`Transaction2`创建一个新的事务。 2. ...
本文将深入探讨“C#中调用Transaction”的相关知识点,包括事务的基本概念、事务的特性、如何在C#代码中创建和管理事务,以及与数据库交互时事务的应用。 ### 1. 事务基本概念 事务是数据库操作的一组逻辑单元,它...