Spring AOP配置死活不起作用,求救

Harryfin 2014-01-07 10:15:50
无论怎么试都无法回滚

AOP配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">

<!-- AOP事务 -->
<tx:advice id="DomainTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="create*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="query*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>

<aop:config proxy-target-class="true">
<aop:pointcut id="DomainServices" expression="execution(* rsj.frdc.domain..service..*.*(..))"/>
<aop:advisor pointcut-ref="DomainServices" advice-ref="DomainTxAdvice"/>
</aop:config>
</beans>


希望匹配的其中一个方法:
rsj.frdc.domain.datacleaner.schedule.fixplan.service.impl.DirtyRecordFixPlanService.save

方法中人为抛出一个异常:

public void save(DirtyRecordFixRule rule) {
dirtyRecordFixRuleDAO.insert(rule);
throw new RuntimeException("出错了!!!");
}


结果“dirtyRecordFixRuleDAO.insert(rule);”所插入的数据还是进数据库了,没有成功回滚。
...全文
1847 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧心之 2016-08-06
  • 打赏
  • 举报
回复
可能是应为spring-mvc扫描了@service注解导致的http://blog.csdn.net/mmm333zzz/article/details/16858209
gys13200 2014-01-17
  • 打赏
  • 举报
回复
打印一下 service是否代理成功了
Harryfin 2014-01-16
  • 打赏
  • 举报
回复
引用 19 楼 byg760 的回复:
你的

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
 
<bean id="oracleDataSource" class="oracle.jdbc.pool.OracleDataSource">

<property name="dataSource" ref="dataSource"/> 不应该是 oracleDataSource 吗????
实际是“ref="${dataSource}"”,然后properties里面配置为oracleDataSource 请大家不要再较真数据源的问题,问题压根就不在数据源这里!
Harryfin 2014-01-15
  • 打赏
  • 举报
回复
引用 14 楼 niit_java 的回复:
有些表的表类型是不支持事务回滚的 确定其他没什么问题 在考虑下这个问题
我直接在service里面人为throw new RuntimeException都不行
礼拜一 2014-01-15
  • 打赏
  • 举报
回复
execution(* rsj.frdc.domain.*.service.*.*(..))试试
paker_ma 2014-01-13
  • 打赏
  • 举报
回复
有些表的表类型是不支持事务回滚的 确定其他没什么问题 在考虑下这个问题
ay转身遇 2014-01-13
  • 打赏
  • 举报
回复
<aop:pointcut id="DomainServices" expression="execution(*rsj.frdc.domain..service.impl..*.*(..))"/> 这个样子试试
雕虫大计 2014-01-13
  • 打赏
  • 举报
回复
需要在调用这个方法的地方捕获抛出的异常
Harryfin 2014-01-07
  • 打赏
  • 举报
回复
引用 7 楼 suciver 的回复:
我怎么在配置文件里没看到楼主的事务管理器 你这个transactionManager的事务管理器没配置啊
我没有全部贴出来

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

<bean id="oracleDataSource" class="oracle.jdbc.pool.OracleDataSource">
	<property name="URL" value="${jdbc.url}"/>
	<property name="user" value="${jdbc.username}"/>
	<property name="password" value="${jdbc.password}"/>
	<property name="connectionCachingEnabled" value="true"/>
	<property name="fastConnectionFailoverEnabled" value="false"/>
	<property name="connectionCacheProperties">
		<props>
			<prop key="InitialLimit">${jdbc.pool.initSize}</prop>
			<prop key="MaxLimit">${jdbc.pool.maxSize}</prop>
			<prop key="MinLimit">${jdbc.pool.oracle.MinLimit}</prop>
			<prop key="InactivityTimeout">${jdbc.pool.oracle.InactivityTimeout}</prop>
		</props>
	</property>
	<property name="connectionProperties">
		<props>
			<prop key="v$session.program">${SYSPROP_PROGRAM}</prop>
			<prop key="v$session.terminal">${SYSPROP_TERMINAL}</prop>
		</props>
	</property>
</bean>
suciver 2014-01-07
  • 打赏
  • 举报
回复
我怎么在配置文件里没看到楼主的事务管理器 你这个transactionManager的事务管理器没配置啊
赵增光 2014-01-07
  • 打赏
  • 举报
回复
抛一个checked exception ,例如就抛个 new Exception("")
Harryfin 2014-01-07
  • 打赏
  • 举报
回复
引用 4 楼 love819178 的回复:
加上 rollback-for="Exception"
无论写rollback-for="Exception"还是rollback-for="java.lang.Exception"都一样
love819178 2014-01-07
  • 打赏
  • 举报
回复
加上 rollback-for="Exception"
Harryfin 2014-01-07
  • 打赏
  • 举报
回复
引用 2 楼 love819178 的回复:
用的什么数据库,支持事务吗
用的是Oracle 10g,spring + ibatis的整合方式
love819178 2014-01-07
  • 打赏
  • 举报
回复
用的什么数据库,支持事务吗
Harryfin 2014-01-07
  • 打赏
  • 举报
回复
补充: 无论是否强制使用CGLIB,结果都一样。但是服务器启动时,有显示这个事务的配置文件已被加载。
jackson_fighting 2014-01-07
  • 打赏
  • 举报
回复
引用 11 楼 Harryfin 的回复:
[quote=引用 9 楼 SDN_SUPERUSER 的回复:] 配置没看出来什么问题 "execution(* rsj.frdc.domain..service..*.*(..))" 这个和你包结构是对应的吗?
我已经列出来了,我觉得是对应的,你可以检查下: “希望匹配的其中一个方法:rsj.frdc.domain.datacleaner.schedule.fixplan.service.impl.DirtyRecordFixPlanService.save”[/quote] 你写一个完成的类路径试一下
Harryfin 2014-01-07
  • 打赏
  • 举报
回复
顺便问问有没办法可以判断接口是否已经被代理?代理成功的话,运行时控制台是否有调试信息的呢?
Harryfin 2014-01-07
  • 打赏
  • 举报
回复
引用 9 楼 SDN_SUPERUSER 的回复:
配置没看出来什么问题 "execution(* rsj.frdc.domain..service..*.*(..))" 这个和你包结构是对应的吗?
我已经列出来了,我觉得是对应的,你可以检查下: “希望匹配的其中一个方法:rsj.frdc.domain.datacleaner.schedule.fixplan.service.impl.DirtyRecordFixPlanService.save”
sunbo624 2014-01-07
  • 打赏
  • 举报
回复
换个数据源试试 要么就是你方法的包名类名和你定义的不匹配
加载更多回复(1)
第1章:对Spring框架进行宏观性的概述,力图使读者建立起对Spring整体性的认识。   第2章:通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速跨入Spring Web应用的世界。   第3章:讲解Spring IoC容器的知识,通过具体的实例详细地讲解IoC概念。同时,对Spring框架的三个最重要的框架级接口进行了剖析,并对Bean的生命周期进行讲解。   第4章:讲解如何在Spring配置文件中使用Spring 3.0的Schema格式配置Bean的内容,并对各个配置项的意义进行了深入的说明。   第5章:对Spring容器进行解构,从内部探究Spring容器的体系结构和运行流程。此外,我们还将对Spring容器一些高级主题进行深入的阐述。   第6章:我们从Spring AOP的底层实现技术入手,一步步深入到Spring AOP的内核中,分析它的底层结构和具体实现。   第7章:对如何使用基于AspectJ配置AOP的知识进行了深入的分析,这包括使用XML Schema配置文件、使用注解进行配置等内容。   第8章:介绍了Spring所提供的DAO封装层,这包括Spring DAO的异常体系、数据访问模板等内容。   第9章:介绍了Spring事务管理的工作机制,通过XML、注解等方式进行事务管理配置,同时还讲解了JTA事务配置知识。   第10章:对实际应用中Spring事务管理各种疑难问题进行透彻的剖析,让读者对Spring事务管理不再有云遮雾罩的感觉。   第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。   第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。   第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及了使用JDK Timer和JDK 5.0执行器的知识。   第14章:介绍Spring 3.0新增的OXM模块,同时对XML技术进行了整体的了解。   第15章:对Spring MVC框架进行详细介绍,对REST风格编程方式进行重点讲解,同时还对Spring 3.0的校验和格式化框架如果和Spring MVC整合进行讲解。   第16章:有别于一般书籍的单元测试内容,本书以当前最具实战的JUnit4+Unitils+ Mockito复合测试框架对如何测试数据库、Web的应用进行了深入的讲解。   第17章:以一个实际的项目为蓝本,带领读者从项目需求分析、项目设计、代码开发、单元测试直到应用部署经历整个实际项目的整体开发过程。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧