我有一些用@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;