spring -事务
来源:互联网 发布:hz是什么意思网络用语 编辑:程序博客网 时间:2024/06/05 06:43
一、什么是事务?
事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
二、事务的特性
原子性:
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生.
一致性:
一致性指事务前后数据的完整性必须保持一致
隔离性:
隔离性指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
持久性:
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
三、Spring的事务管理实现
1.编程式事务管理
第一步: spring-core.xml
<!-- spring编程事务管理 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><bean id="transactionManagerTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="transactionManager"></property></bean>第二步:业务层代码实现/** * 转账业务方法 * @param from 转账人 * @param to 收款人 * @param money 转账金额 * @throws SQLException */public void transAccounts(String from, String to, int money) throws SQLException {transactionManagerTemplate.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus status) {try {int oldFrom = accountSpringJdbcDaoImpl.getAccountMoney(from);int oldTo = accountSpringJdbcDaoImpl.getAccountMoney(to);accountSpringJdbcDaoImpl.updateAccountMoney(from, oldFrom-money); //1000-200//int i = 10/0;accountSpringJdbcDaoImpl.updateAccountMoney(to, oldTo+money); //1000+200 } catch (SQLException e) {e.printStackTrace();}}});}
2. 声明式事务管理
1>基于TransactionProxyFactoryBean的方式
2>基于AspectJ的XML方式
使用 asoectj 需要引入asoecty -jar包
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><tx:advice id="txAdivce" transaction-manager="transactionManager"><tx:attributes><tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED" /><tx:method name="save*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice> <aop:config> <aop:pointcut expression="execution(* com.java1704.spring.transaction.server.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="txAdivce" pointcut-ref="pointcut"/> </aop:config>
3>注解方式进行事务管理
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 使用annotation定义事务 --><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
/** * 转账业务方法 * @param from 转账人 * @param to 收款人 * @param money 转账金额 * @throws SQLException */@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)public void transAccounts(String from, String to, int money) throws SQLException {int oldFrom = accountDaoImpl.getAccountMoney(from);int oldTo = accountDaoImpl.getAccountMoney(to);accountDaoImpl.updateAccountMoney(from, oldFrom-money); //1000-200int i = 10/0;accountDaoImpl.updateAccountMoney(to, oldTo+money); //1000+200 }
阅读全文
0 0
- 事务:spring事务支持
- 事务:spring事务支持
- spring 事务,事务特性
- Spring事务
- Spring 事务
- Spring事务
- spring事务
- Spring事务
- spring 事务
- spring 事务
- spring事务
- Spring 事务
- spring事务
- Spring 事务
- spring 事务
- Spring事务
- Spring 事务
- spring事务
- read的返回值
- Matlab下调用Python接口
- Spring MVC(一)
- 水平跑马灯&垂直跑马灯
- Java工程师学习线路
- spring -事务
- SubList分页-011-Constant类
- 程序是如何执行的(一)a=a+1
- 天凉了,这里有适合懒人的洗衣法推荐给你丨钛空舱双十一特惠
- 机器学习
- <algorithm>头文件
- 阿里双十一,3分01秒破百亿;乐视网称贾跃亭无力履行承诺;法乐第未来宣布解职CFO和CTO丨价值早报
- Atom常用package记录
- SubList分页-012-StudentService接口