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

有可能实现吗?

最佳答案

您可以使用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;

关于java - Spring 执行带注释方法的事务逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10834727/

10-10 10:27