spring为注释方法强制执行事务逻辑

时间:2012-05-31 13:35:05

标签: java spring

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

是否可以实施?

1 个答案:

答案 0 :(得分: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;
相关问题