我有一些用@Transactional
注释注释的方法。此方法不是通过spring生成的代理调用的,但我需要以某种方式强制执行事务创建而不使用该代理。
是否可以实施?
答案 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;