1
<!-- 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 的事务管理功能,但我无法让它工作。我一直试图解决它几个小时,但没有运气。

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

任何帮助将不胜感激

4

1 回答 1

2

这是因为 Spring AOP 只能:

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

a)和b)是你的错,你需要修复它。-- 克服 c) 我用 AspectJ 编译时挥动强烈替换 Spring AOP 的问题。

如果我是对的,那么即使是事务处理(by@Transational 也不能正常工作。

需要别人检查:

我从未见过@Transactional与 结合使用JdbcTemplate,所以我怀疑这是否有效。——但我可能错了。

于 2011-03-08T14:27:58.460 回答