SSH和合心得02 (Spring控制事务)

这几天被事务困住了许久,按很多前辈说的方法配置都未成功,通过大量的搜索才找到原因。


Spring 使用AOP事务时容易出错的点(使用这种方式的事务需要导入aspectjrt.jar,aspectjweaver.jar 两个包Spring/lib/aspectj)


<aop:config>
<aop:pointcut id="deleteOperation" expression="execution(* jk.dao.*.*(..))" />
<aop:advisor advice-ref="deleteTx" [b]pointcut-ref[/b]="deleteOperation"/>
</aop:config>


加粗的地方就是容易写错的,这点一般习惯性的用eclipse自带的提示首先会出现 [b]pointcut[/b] 而不是 [b]pointcut-ref[/b] 就是这个细微差别就会引起错误。


[b]关键点[/b],[color=red]最难发现的错误
因为我试了很多种方式都没成功,我就怀疑是其它地方引起的,就去搜索相关事务不成功的问题,无意中发现一个回答说Mysql里面建的表如果不是 [b]Innodb[/b] 就不能支持事务!!马上去尝试,结果就是这个原因引起[/color]。

例子SQL:

DROP TABLE IF EXISTS `ssh`.`sshuserinfo`;
CREATE TABLE `ssh`.`sshuserinfo` (
`userid` bigint(20) NOT NULL,
`username` varchar(10) default NULL,
`age` int(11) default NULL,
`BIRTHDAY` date default NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


常用Spring的事务控制方法

定义一个基础的事务配置
key="deleteArray" 这种配置代表方法名为这个的就会进行事务控制,"delete*" 表示只要是以delete开头的方法都会控制事务,PROPAGATION_REQUIRED 是事务控制的其它一种,及当前没有事务打开一个,在这个方法中其它方法在执行的时候如果当前有事务就用当前这个,没有就创建一个,这种基本满足我们普通的事务控制,另外还有3种,可以看Spring的文档和查询这方面的资料

[code]
<bean id="proxybase"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="deleteArray">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
[/code]
在使用事务的时候只需要定义相应的代理类继承于基础事务,然后指定需求代理的目标类就能完成事务控制
[code]
<bean id="userInfoDAOProxy" parent="proxybase">
<property name="target" ref="userInfoDAO"/>
</bean>
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值