使用 编写事务方法时@Async
,无法捕获@Transactional
异常。喜欢ObjectOptimisticLockingFailureException
,因为它们在例如事务提交期间被抛出方法本身之外。
例子:
public class UpdateService {
@Autowired
private CrudRepository<MyEntity> dao;
//throws eg ObjectOptimisticLockingFailureException.class, cannot be caught
@Async
@Transactional
public void updateEntity {
MyEntity entity = dao.findOne(..);
entity.setField(..);
}
}
我知道我可以捕获一般如下的@Async
异常:
@Component
public class MyHandler extends AsyncConfigurerSupport {
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (ex, method, params) -> {
//handle
};
}
}
但我更愿意以不同的方式处理给定的异常,只有当它发生在UpdateService
.
问题:我怎样才能在里面抓住它UpdateService
?
是唯一的机会:创建一个附加@Service
的包装UpdateService
和有一个try-catch
块?或者我可以做得更好吗?