spring数据源事务管理器没有回滚

时间:2011-03-08 13:54:53

标签: java spring rollback spring-transactions

<!-- Data source definition -->
<bean id="dataSourceWebsube"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url.websube}"
    p:username="${jdbc.username.websube}"   p:password="${jdbc.password.websube}" />

<bean id="jdbcTemplateWebsube" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSourceWebsube" />
</bean>         

<!-- Transaction manager, actually this one is useless since the Transaction Manager Bean is already called transactionManager -->      
<tx:annotation-driven transaction-manager="transactionManager"/>  

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

public class Test 
{
@Transactional
public static void testTranscational(JdbcTemplate jdbcTmpl)
{
    String sql = null;                              
    sql = "INSERT INTO NBSM.INT_RTLNOUTBOUND_PRODUCTS(BASEPRODUCTCODE)VALUES(1)";                
    jdbcTmpl.update(sql);           
    throw new RuntimeException();                       
}

public static void main(String[] args) {            
    ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
    JdbcTemplate jdbcTmpl = (JdbcTemplate) ctx.getBean("jdbcTemplateWebsube");      
    testTranscational(jdbcTmpl);
}
}

您好,

我正在尝试测试spring的事务管理功能,但我无法让它工作。我一直试图解决它几个小时但没有运气。

上面你可以看到相关的配置xml定义和dao测试类。即使我使用调试级别进行日志记录,也没有回滚机制的足迹。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

这是因为Spring AOP只能:

  • a)在Spring托管Bean上工作
  • b)处理无静态方法
  • c)仅在调用Spring AOP代理时考虑(您需要从其他bean调用bean,而不是从自己调用bean)

a)和b)是你的错,你需要解决它。 - 克服c)的问题我强烈用AspectJ编译时间代替Spring AOP。

如果我是对的,即使是@Transational的交易处理也一定不能正常工作。

需要由其他人检查:

我从未见过@TransactionalJdbcTemplate的组合,所以我怀疑这是否有效。 - 但我可能错了。