ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring-aop的配置,开启事务(xml)

2019-08-17 17:06:26  阅读:656  来源: 互联网

标签:xml 事务 Spring REQUIRED 受查 PROPAGATION aop Exception


基础架包和aop联盟包, spring-aop.jar
根据项目需求添加jar包

事务这个概念的数据库的
实际项目中事务的处理在Service

Spring控制事务处理有三种方法
	Spring-aop的配置

Spring-aop的注解
Spring-aspectJ的配置

事务四大特性
A原子性
C一致性
Isolation隔离性
D持久性

事务的隔离级别: ISOLATION_DEFAULT
读未提交:脏读
读已提交:不可重复读,Oracle和SqlServer数据库的默认隔离级别
可重复读:底层使用了快照(缓存),用户执行增删改的操作,会刷新快照,幻读,
MySql 使用的默认级别
串行化:操作数据时,当前数据行加锁,消耗性能太大

事务的传播机制: PROPAGATION_REQUIRED
两个事务直接相互调用时,事务的提交方法
PROPAGATION_REQUIRED:A事务调用B事务,两个事务作为一个事务执行

然后我们再看看xml

<?xml version="1.0" encoding="UTF-8"?>


<context:property-placeholder location=“classpath:mysqljdbc.properties”/>

<bean id="stockService" class="com.woniuxy.service.imp.StockServiceImp">
<property name="stockDao" ref="stockDao"/>
<property name="userDao" ref="userDao"/>
</bean>
<bean id="stockDao" class="com.woniuxy.dao.imp.StockDaoImp">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userDao" class="com.woniuxy.dao.imp.UserDaoImp">
<property name="dataSource" ref="dataSource"/>
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--注册事务代理,完成事务的织入  -->
<bean id="proxy" 
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="target" ref="stockService"/>
<property name="transactionAttributes">
<props>
<prop key="open*">ISOLATION_DEFAULT,PROPAGATION_REQUIRED</prop>
<prop key="buy*">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,</prop>
</props>
</property>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

注意这里的key是方法名,我测试的是runtime异常
在这里插入图片描述
@Override
public void buyStock(String uname, double balance, String sname, int count) {
userDao.addUser(uname, balance);
if(true){
throw new RuntimeException();
}
stockDao.addCount(sname, count);
}
在测试方法如果扔的Exception(),那么在方法和xml配置需要以下修改
public void buyStock(String uname, double balance, String sname, int count) throws Exception {
userDao.addUser(uname, balance);
if(true){
throw new Exception();
}
stockDao.addCount(sname, count);
}
xml
ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-Exception

Spring事务处理对于Exception和RuntimeException这两种异常的处理机制不同
RuntimeException:非受查异常默认回滚
Exception:受查异常默认提交
可以通过配置来修改默认处理方式
一受查异常:受查异常回滚
+非受查异常:非受查异常提交

下一篇:注解配置

标签:xml,事务,Spring,REQUIRED,受查,PROPAGATION,aop,Exception
来源: https://blog.csdn.net/qq_32749073/article/details/99694794

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有