当你涉及到两个其他业务方法一起绑定为一个业务操作的时候,例如一个ATM取款的简单操作:
ATM机器吐钱2和更新你帐户存款就是一个取钱的主要操作,它就需要要求如果两者都成功,即
一起提交,如果有一者失败,即回滚该两个操作,这种时候就需要事务了。
一、事务的特性:原子性、一致性、分离性、持久性。
1、原子性:事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
2、一致性:事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
3、分离性:分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。
4、持久性:持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障。持久性通过数据库备份和恢复来保证。
二、为什么要用Spring来管理事务呢,有什么好处呢?
1、首先当然是工作量上的减轻,比传统要自己手工在程序写事务要减少很多工作,用spring只是需要简单的配置即可,灵活性也有提高,spring可以灵活的针对业务方法取消或者增加事务,也可以灵活配置事务的隔离级别等。
2、spring事务支持对于不同的事务api支持,比如jdbc,dbcp,hibernate等,可通过简单的配置支持JTA事务。
三、如何使用Spring来管理事务:
1、配置事务控制器:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
2、AOP拦截器实现事务,统一配置了事务:
<aop:config>
<aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* com.cun.transaction.*Transaction.*(..))"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
3、为单独一个业务方法配置事务,并指定为PROPAGATION_REQUIRES_NEW的事务:
<bean id="potentialMemberProcessBussines" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target">
<bean class="com.csair.cbd.member.services.business.PotentialMemberProcessBussines"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="singelProcess">
PROPAGATION_REQUIRES_NEW,ISOLATION_READ_COMMITTED,timeout_360,-Exception
</prop>
</props>
</property>
</bean>
Spring基本的事务配置就在这里啦,具体配置说明后续。
分享到:
相关推荐
Spring5 框架 ---- 事务操作 ---- 代码 Spring5 框架 ---- 事务操作 ---- 代码 Spring5 框架 ---- 事务操作 ---- 代码 Spring5 框架 ---- 事务操作 ---- 代码 Spring5 框架 ---- 事务操作 ---- 代码 Spring5 框架 --...
MyBatis-Spring连接类。... 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。 正如第二版那样,Spring ...
MyBatis-Spring 会帮助你... 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。
1. Java基础知识: - 语法 - 面向对象编程 - 集合框架 - 异常处理 - 多线程编程 2. 数据库: - 熟悉SQL语言 - 了解关系型数据库和非关系型数据库 - 数据库连接池 - 数据库事务 3. Spring框架: - ...
分布式事务框架LCN支持springcloud 2.0.5 ,transaction-springcloud-4.1.2.jar
Dynamic-Datasource (opens new window)- 基于 SpringBoot 的多数据源组件,功能强悍,支持 Seata 分布式事务。 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 ...
班级事务-班级事务系统-班级事务系统源码-班级事务管理系统-班级事务管理系统java代码-班级事务系统设计与实现-基于ssm的班级事务系统-基于Web的班级事务系统设计与实现-班级事务网站-班级事务网站代码-班级事务平台...
1. Java基础知识: - 语法 - 面向对象编程 - 集合框架 - 异常处理 - 多线程编程 2. 数据库: - 熟悉SQL语言 - 了解关系型数据库和非关系型数据库 - 数据库连接池 - 数据库事务 3. Spring框架: - ...
1. Java基础知识: - 语法 - 面向对象编程 - 集合框架 - 异常处理 - 多线程编程 2. 数据库: - 熟悉SQL语言 - 了解关系型数据库和非关系型数据库 - 数据库连接池 - 数据库事务 3. Spring框架: - ...
rocketmq-spring-boot-starter 阿里云RocketMQSpring图书版支持功能: 发送普通消息的三种模式:同步,异步和单向 订阅消息群集,广播 发送和接收顺序消息 交易讯息 延迟讯息 接收和接收定时消息定时消息和延迟消息...
班级事务-班级事务系统-班级事务系统源码-班级事务管理系统-班级事务管理系统java代码-班级事务系统设计与实现-基于ssm的班级事务系统-基于Web的班级事务系统设计与实现-班级事务网站-班级事务网站代码-班级事务平台...
分布式数据源,数据源的动态寻找,分布式事务JTA实现-spring-jta-mybatis
高校办公室行政事务-高校办公室行政事务系统-高校办公室行政事务系统源码-高校办公室行政事务管理系统-高校办公室行政事务管理系统java代码-高校办公室行政事务系统设计与实现-基于springboot的高校办公室行政事务...