Spring 学习笔记 事务管理 解决购买彩票问题
2017-08-07 20:56
656 查看
此文章接上一篇》》》
此配置文件没有采用事务管理,所以购买股票的时候,出现了数据库中账户金额减少了,但是股票数目没有增加的不一致情况。
通过三种方式解决会出现的操作不一致的方法:
1:使用事务代理工厂
2:使用事务注解驱动
3:使用aspectj的事务通知aop 需要我们导入aspect的两个jar包 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar 和spring-aspects-4.2.1.RELEASE.jar
下面还是粘贴代码,主要是针对第三种方法解决: 注意更改了xml主配置文件bean在test测试方法需要修改 service = (IBuyStockService) ac.getBean(“BuyStockService”); 其他不需要修改
我们需要在主配置文件做如下的配置
1:使用事务代理工厂 主要针对配置文件
2:使用事务注解驱动
这里用在serviceImpl里面使用注解的方式来实现
在主配置文件只需要做一个配置即可
3:使用aspectj的事务通知aop
最后在运行中我们都能看到即使人为的制造了异常,但是还能满足事务的原子性!充分保证了否买彩票实例的实现
作为实习生,因为今天下午经理分配了一个新的任务,所以下面的SSH框架的整合暂时没有实现,但是我会在空余时间抽空完成!
今天经理给了公司以前做的安全产品,要我做功能移植,因为项目比较老,所以在数据库移植方法存在颇多问题,加上其中一个项目的sql语句暂时没有,所以只能先自己看看功能!
希望自己赶快融入到项目开发中去!!fighting,让我们一起加油吧
此配置文件没有采用事务管理,所以购买股票的时候,出现了数据库中账户金额减少了,但是股票数目没有增加的不一致情况。
通过三种方式解决会出现的操作不一致的方法:
1:使用事务代理工厂
2:使用事务注解驱动
3:使用aspectj的事务通知aop 需要我们导入aspect的两个jar包 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar 和spring-aspects-4.2.1.RELEASE.jar
下面还是粘贴代码,主要是针对第三种方法解决: 注意更改了xml主配置文件bean在test测试方法需要修改 service = (IBuyStockService) ac.getBean(“BuyStockService”); 其他不需要修改
我们需要在主配置文件做如下的配置
1:使用事务代理工厂 主要针对配置文件
<!-- 注册事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 注册事务 增强对象是service --> <bean id="serviceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="target" ref="BuyStockService"/> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <!-- 这里配置的是在连接点方法上要应用什么属性方法 隔离级别isolation_dafault 传播propagation_required--> <prop key="open*">ISOLATION_DEFAULT,PROPAGATION_REQUIRED</prop> <prop key="buyStock">ISOLATION_DEFAULT,PROPAGATION_REQUIRED,-BuyStockException</prop> </props> </property> </bean>
2:使用事务注解驱动
这里用在serviceImpl里面使用注解的方式来实现
@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED) @Override public void openAccouont(String aname, double money) { ado.insertAccount(aname,money); } @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED) @Override public void openStock(String sname, int count) { idao.insertStock(sname,count); } @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,rollbackFor=BuyStockException.class) @Override public void buyStock(String aname, double money, String sname, int count) throws BuyStockException { Boolean isBuy = true; ado.updateAccount(aname,money,isBuy); //人为的制造异常,然后引出事务 if (true) { throw new BuyStockException("购买股票不成功!!!但是钱被扣了"); } idao.updateStock(sname,count,isBuy); }
在主配置文件只需要做一个配置即可
<!-- 注册事务注解驱动 --> <tx:annotation-driven transaction-manager="transactionManager"/>
3:使用aspectj的事务通知aop
<!-- 注册 txAdvice 事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 对连接点方法上要使用的事务属性进行配置 --> <tx:method name="open" isolation="DEFAULT" propagation="REQUIRED"/> <tx:method name="buyStock" isolation="DEFAULT" propagation="REQUIRED" rollback-for="BuyStockException"/> </ 4000 tx:attributes> </tx:advice> <!-- 注册aop --> <aop:config> <!-- 指明切入点 所有的service方法的切入点 --> <aop:pointcut expression="execution(* *..service.*.buyStock(..))" id="myPointcut"/> <!-- 连接到连接点 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/> </aop:config>
最后在运行中我们都能看到即使人为的制造了异常,但是还能满足事务的原子性!充分保证了否买彩票实例的实现
作为实习生,因为今天下午经理分配了一个新的任务,所以下面的SSH框架的整合暂时没有实现,但是我会在空余时间抽空完成!
今天经理给了公司以前做的安全产品,要我做功能移植,因为项目比较老,所以在数据库移植方法存在颇多问题,加上其中一个项目的sql语句暂时没有,所以只能先自己看看功能!
希望自己赶快融入到项目开发中去!!fighting,让我们一起加油吧
相关文章推荐
- SpringMVC + Spring + MyBatis 学习笔记:SpringMVC和Spring一同工作的时候,AOP事务管理不起作用的解决方法
- Spring学习笔记(15)----使用Spring注解方式管理事务
- Spring学习笔记 事务管理
- Spring 注解方式进行事务管理的用法介绍详解【Java学习笔记】
- Spring学习笔记(九)-----事务管理(宣告式事务管理)
- Spring学习笔记(17)----使用Spring注解方式管理事务
- Java框架spring 学习笔记(十九):事务管理(注解管理)
- Spring学习笔记五:Spring进行事务管理
- 【SpringBoot】2小时学会SpringBoot学习笔记( 第6章 事务管理 )
- 学习笔记:spring与hibernate整合(采用aop来管理事务来实现声明式事务)
- spring学习笔记:spring事务管理
- Beginning Spring学习笔记——第6章(一)Spring事务管理基础
- Beginning Spring学习笔记——第6章(三)使用Spring进行编程式事务管理
- Spring 学习笔记之事务管理
- spring管理事务异常时事务未回滚问题笔记
- Spring框架学习笔记(10)——Spring中的事务管理
- Spring in Action 学习笔记—第五章事务管理
- Spring事务管理学习笔记
- spring学习笔记(7)——spring事务管理方式
- 学习笔记---------------------spring2.5+jdbc(jdbctemplate)+事务管理