2011-11-04 111 views
3

我正在处理一个服务层,它在执行任务时记录到数据库。我希望确保在发生错误时不会回滚此日志,因为我应该始终记录失败的尝试。下面是示例代码来解释我想要的是什么。嵌套的Spring事务从不回滚

@Transactional(rollbackFor=Exception.class) 
public void performTask() 
{ 
    //Perform task 1 
    log("task1Complete"); 

    //Perform task 2 
    log("task2Complete"); 
} 

@Transactional() 
public void log(String message) 
{ 
    //commit message to DB 
    //This should never rollback 
} 

我假设这样做的方式是开始一个新的交易,但我不知道如何。

回答

2

用途:

@Transactional(propagation = Propagation.REQUIRES_NEW) 

要知道,调用一个方法@Transactional的“这”将不会打开一个交易,如果你使用的是JDK代理或CGIL代理。您必须改用AspectJ,或者在另一个对象上调用它来通过它的代理。