spring 的AOP事务,设置了跟没有一样,不成功,不知道为什么
spring-config.xml中与事务相关的代码:<beanid="transactionManager"class="org.springframework.jdb...
spring-config.xml 中与事务相关的代码:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* common.Dao.*(..))"
id="allBoMethod" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allBoMethod" />
</aop:config>
按理说这些代码加进去后,Dao里面的所有方法都受到了事务的管理,
public void addUser(UserInfo userInfo){
this.getHibernateTemplate().save(userInfo);//1
userInfo.setPassword(null);//2
this.getHibernateTemplate().save(userInfo);//3
}
上面是我dao里面的一个方法,在这个方法里面,1成功了,3失败了,有异常抛出来,但是最终却仍插进一条数据。。XML的解析并没有出现问题啊!怎么事务会不起作用呢 展开
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* common.Dao.*(..))"
id="allBoMethod" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allBoMethod" />
</aop:config>
按理说这些代码加进去后,Dao里面的所有方法都受到了事务的管理,
public void addUser(UserInfo userInfo){
this.getHibernateTemplate().save(userInfo);//1
userInfo.setPassword(null);//2
this.getHibernateTemplate().save(userInfo);//3
}
上面是我dao里面的一个方法,在这个方法里面,1成功了,3失败了,有异常抛出来,但是最终却仍插进一条数据。。XML的解析并没有出现问题啊!怎么事务会不起作用呢 展开
2个回答
展开全部
我先说明下;楼主说的dao里面所有方法都受到事务管理是错误的;你的 <tx:method name="add*" propagation="REQUIRED" />
只设置了add打头的方法,所以只有add开头的方法才受到事务管理;还有我建议
这句<aop:pointcut expression="execution(* common.Dao.*(..))"改成<aop:pointcut expression="execution(* common.Dao.*.*(..))";
要不然把DataSourceTransactionManager事务管理器改成这个;hibernateTransactionManager看看这个可以不
只设置了add打头的方法,所以只有add开头的方法才受到事务管理;还有我建议
这句<aop:pointcut expression="execution(* common.Dao.*(..))"改成<aop:pointcut expression="execution(* common.Dao.*.*(..))";
要不然把DataSourceTransactionManager事务管理器改成这个;hibernateTransactionManager看看这个可以不
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询