微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

基础架包和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:受查异常认提交
可以通过配置来修改认处理方式
一受查异常:受查异常回滚
+非受查异常:非受查异常提交

下一篇:注解配置

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。