Spring @Async 注解

标签 spring multithreading spring-transactions spring-annotations xml-configuration

我有一个关于 Spring @Async 注释的问题。 我有一个 Controller 自动连接了一个服务(GnInsuranceDetailsS​​ervice)

@RequestMapping(value="/agn/AP0W01A_010/insertDetail.do")
public ResponseEntity<?> insertDetail(@ModelAttribute("dto")GnInsuranceDetailsDTO dto,HttpSession session) throws Exception {
    gnInsuranceDetailsDTO.setBkFlag(getAgnUserInfo(session).getBkFlag());
    gnInsuranceDetailsService.insertGnInsuranceDetail(dto);//open another thread to insert data
    MessageDTO dto = new MessageDTO(AgnConstant.INSERT_SUCCESS);
    return new ResponseEntity<MessageDTO>(dto,HttpStatus.OK);// increase return time for client
    }

服务 insertGnInsuranceDetail 方法我声明了@Async up 方法。

@Transactional(readOnly = false)
@Async
public void insertGnInsuranceDetail(GnInsuranceDetailsDTO gnInsuranceDetailsDTO) throws Exception{
GnInsuranceDetails entity = gnInsuranceDetailsDTO.convert();
gnInsuranceDetailsDAO.save(detailsEntity);
}

我为服务方法添加了@Async 以增加客户端的 Controller 响应时间,但它并没有像我想的那样工作。 我会丢失什么东西吗?或者我怎样才能以最简单的方式修改?

最佳答案

您不会丢失任何东西,当您将 @Async 放在方法中时,服务将在不同的线程中执行, Controller 的 insertDetail 方法将不会返回,直到您的 insertGnInsuranceDetail 被返回或抛出任何异常。

关于Spring @Async 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39866193/

相关文章:

java - 长时间运行的操作的状态应该存储在哪里?

java - Spring bean 实例化顺序

multithreading - 在多线程应用程序中使用屏障的真实示例是什么?

spring - Spring中多个数据库的EnableTransactionManagement

提交表单时Spring绑定(bind)异常

java - spring 拦截器不向@RestController 服务添加 header

java - 从 CSV 文件读取数据后,将循环内的特定任务设为多线程

java - Spring Boot 中的线程本地行为

java - 如果 B 出错,则回滚 A。 Spring 启动,jdbctemplate

java - 多个事务管理器 - 在运行时选择一个 - Spring