我的项目中有一个场景,我需要开发一个异步服务,该服务将从 Spring Boot 执行一些数据库更新操作。我知道@Async总是会生成一个新线程。因此,我正在采取以下操作:
我创建了两个单独的服务类。
第一服务等级[例如服务等级 A]
@Async
@Override
public Future<MyResponseModel> myMethodForApproval(parameterList) {
MyResponseModel myResponseModel= new MyResponseModel();
serviceClassB.performApproval(parameterList);
myResponseModel.setStatus("Success");
myResponseModel.setMessage("Approval process initiated successfully");
return new AsyncResult<MyResponseModel>(myResponseModel);
}
Run Code Online (Sandbox Code Playgroud)
在第二个服务类中【说服务类B,写的是实际的业务逻辑】
@Transactional(readOnly = false, propagation = REQUIRES_NEW, rollbackFor = { Throwable.class })
public void performApproval(parameterList) {
//all the business logic checking.
repoLayer.saveAll(myEntities);
Run Code Online (Sandbox Code Playgroud)
}
在控制器层:
@RequestMapping(value = "/approveProcess", method = RequestMethod.POST, consumes = { "application/json" })
public ResponseEntity<MyResponseModel> approveProcess(@RequestBody parameterList) {
serviceClassA.myMethodForApproval(parameterList);
}
Run Code Online (Sandbox Code Playgroud)
现在我得到了例外
org.springframework.dao.InvalidDataAccessApiUsageException: no transaction is in progress; nested exception is javax.persistence.TransactionRequiredException: no transaction is in progress
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |