Springaop事务控制
2022-11-24 17:29:45 7 举报
AI智能生成
面向切面 aop 事务控制
作者其他创作
大纲/内容
事务
事务概念
事务是对数据库的一系列操作,进行统一的提交或者回滚,所有的操作必须一起完成,如果中间出现异常,那么就回滚到之前的数据状态。<br>
事务的四个特性(ACID)<br>
原子性(atomicity)
一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。<br>
一致性(consistency):<br>
事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。几个并行执行的事务,其执行结果必须与按某一顺序串行的结果相一致。
持久性(durability)
持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该造成其丢失。
隔离性(isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
Spring中的事务管理
编程式的事务管理
1.配置事务管理器(以JdbcDataSource为例)
将dataSource连接池注入管理器中,这时因为jdbc进行管理时需要获得连接对象,然后用connection.setAutoCommit(false)使其不自动提交,<br>执行完后要conmmit,有异常的话要rollback。 能获取这个连接的就是dataSource连接池,而DataSourceTransactionManager事务管理器<br>是真正进行事务管理的类,而连接池又能获取到连接对象,所以要将其注入。
<!-- 配置事务管理器 --><br><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><br> <property name="dataSource" ref="dataSource"/><br></bean>
2.配置事务管理模板
<bean id = "transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><br> <property name="transactionManager" ref="transactionManager"/><br></bean><br>
3.在Service中注入模板
<!-- service层注入transactionTemplate --><br><bean id = "accountService" class="com.cfx.service.impl.AccountServiceImpl"><br> <property name="transactionTemplate" ref="transactionTemplate"></property><br></bean><br>
private TransactionTemplate transactionTemplate;<br> <br>public void setTransactionTemplate(TransactionTemplate transactionTemplate) {<br> this.transactionTemplate = transactionTemplate;<br> }<br> <br> @Override<br> public void transfer(String out, String in, Double money) {<br> transactionTemplate.execute(new TransactionCallbackWithoutResult(){<br> @Override<br> protected void doInTransactionWithoutResult(TransactionStatus arg0) {<br> accountDao.outMoney(out, money);<br> int i = 1/0;//若不进行事务管理,出现错误,outMoney()将会执行。<br> accountDao.inMoney(in, money);<br> }<br>
声明式的事务管理
简介
Spring集成了很多内置的事务管理器,最常用两种便是DataSourceTransactionManager和HibernateTransactionManager:<br>DataSourceTransactionManager:用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理;<br>HibernateTransactionManager:用于集成Hibernate框架时的事务管理.
基于AspectJ的方式<br>
配置事务管理器..(切面)<br> <tx:advice id="accountAdvice" transaction-manager="transactionManager"> <br> <!--配置事务传播性,隔离级别以及超时回滚等问题 --> <br> <tx:attributes> <br> <tx:method name="save*" propagation="REQUIRED" /> <br> <tx:method name="del*" propagation="REQUIRED" /> <br> <tx:method name="update*" propagation="REQUIRED" /> <br> <tx:method name="add*" propagation="REQUIRED" /> <br> <tx:method name="*" rollback-for="Exception" /> <br> </tx:attributes> <br> </tx:advice> <br> <aop:config> <br> <!--配置切点 与切面--> <br> <aop:pointcut id="services" expression="execution(* com.cfx.service.*.*(..))" /> <br> <aop:advisor pointcut-ref="services" advice-ref="accountAdvice" /> <br> </aop:config><br>因为采用切面的方式,所以其他位置将不需要改变。
0 条评论
下一页