Spring事务管理不起作用,求大神解答 10
<context:property-placeholderlocation="classpath:database.properties"/><beanid="dataS...
<context:property-placeholder location="classpath:database.properties" />
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
.............
</bean>
<!-- 数据连接管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- myBatis文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:myBatis-config.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务控制 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="NOT_SUPPORTED" rollback-for="java.lang.Exception" />
<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
</tx:attributes>
</tx:advice>
<!-- 系统功能模块添加处理-->
<aop:config proxy-target-class="true">
<aop:pointcut id="sysAdmin" expression="execution(* org.dis.*.*.*.service(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="sysAdmin" />
</aop:config>
配置是这样,但是方法内抛出异常,数据还是会更新,没有回滚。求解答 展开
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
.............
</bean>
<!-- 数据连接管理 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- myBatis文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:myBatis-config.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务控制 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager" >
<tx:attributes>
<tx:method name="select*" read-only="true" propagation="NOT_SUPPORTED" rollback-for="java.lang.Exception" />
<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
</tx:attributes>
</tx:advice>
<!-- 系统功能模块添加处理-->
<aop:config proxy-target-class="true">
<aop:pointcut id="sysAdmin" expression="execution(* org.dis.*.*.*.service(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="sysAdmin" />
</aop:config>
配置是这样,但是方法内抛出异常,数据还是会更新,没有回滚。求解答 展开
1个回答
展开全部
java.lang.Exception 这个范围太宽泛了, 直接省略掉吧。
<tx:method name="*" propagation="REQUIRED" />
然后,如果还不行, 尝试下面的写法。
<aop:config expose-proxy="true">
<aop:pointcut id="sysAdmin" expression="execution(* org.dis.*.*.*.service(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="sysAdmin" />
</aop:config>
<tx:method name="*" propagation="REQUIRED" />
然后,如果还不行, 尝试下面的写法。
<aop:config expose-proxy="true">
<aop:pointcut id="sysAdmin" expression="execution(* org.dis.*.*.*.service(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="sysAdmin" />
</aop:config>
更多追问追答
追问
我之前也特意将范围缩小了,我在方法里故意让它抛出ArithmeticException,并且将你说的这个
写上去了,还是没用啊。求解释。
追答
奇怪了,
配置文件里面, 这个有吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询