【发布时间】:2016-05-12 15:41:53
【问题描述】:
使用 spring4 @Transactional 和 jdbctemplate 时事务不起作用!!请帮帮我
应用程序.xml
<context:component-scan base-package="com.test" />
<bean id="txtManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txtManager" proxy-target-class="true"/>
java代码
package com.test;
@Component
public class TService {
@Autowired JdbcTemplate jdbcTemplate;
@Transactional(rollbackFor = Exception.class)
public void tt() throws Exception{
jdbcTemplate.update("insert into t_test values(1)");
jdbcTemplate.update("insert into t_test(dd) values(1)");
}
}
控制器代码
@Controller("")
public class Tcontroller {
@Autowired TService ts;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody Object all() throws Exception {
ts.tt();
return "";
}
}
tt() 抛出异常,但 Transaction 没有回滚!
今天找到了这个
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:833) - Unable to apply any optimisations to advised method: public void com.test.TService.tt() throws java.lang.Exception
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:797) - Found 'equals' method: public boolean java.lang.Object.equals(java.lang.Object)
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:833) - Unable to apply any optimisations to advised method: public java.lang.String java.lang.Object.toString()
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:802) - Found 'hashCode' method: public native int java.lang.Object.hashCode()
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:833) - Unable to apply any optimisations to advised method: protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:791) - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.springframework.aop.Advisor)
[DEBUG] 23:36:19,729 org.springframework.aop.framework.CglibAopProxy (accept:791) - Method is declared on Advised interface: public abstract int org.springframework.aop.framework.Advised.indexOf(org.aopalliance.aop.Advice)
代理创建失败?
【问题讨论】:
-
你在哪里调用 tt() 方法。显示一个例子
-
我猜你也有一个
DispatcherServlet,它有一个不同的配置文件,其中还包含一个<context:component-scan base-package="com.test" />... -
是的,你的回复提醒了我,applicationContext.xml 和 springmvc-servlet.xml 都包含
... 问题已经解决, 再次感谢大家
标签: java spring transactions jdbctemplate spring-transactions