2

我有一些用@Transactional注释注释的方法。此方法不是通过 spring 生成的代理调用的,但我需要在不使用该代理的情况下以某种方式强制创建事务。

是否可以实施?

4

1 回答 1

2

您可以TransactionTemplate在提供的代码块/回调中使用手动启动事务:

final TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

transactionTemplate.execute(new TransactionCallback<String>()
{
    @Override
    public String doInTransaction(TransactionStatus status)
    {
        //...
        return "Some result";
    }
});

或者,如果您不需要结果:

transactionTemplate.execute(new TransactionCallbackWithoutResult()
{
    @Override
    protected void doInTransactionWithoutResult(TransactionStatus status)
    {
        //...
    }
});

当然也可以定义TransactionTemplate为Spring bean,直接注入。否则,您可以在每次需要时创建它,但是您需要注入事务管理器:

@Resource
private PlatformTransactionManager transactionManager;
于 2012-05-31T14:16:58.100 回答