gpt4 book ai didi

java - Spring Boot Rest Rest API 上的异步 - 注释应该仅在服务或 Controller 上

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:35 25 4
gpt4 key购买 nike

我必须在 Spring Boot 中实现具有异步功能的方法:

我对注释异步的位置有点困惑,基本上我的休息 Controller 如下:

@RestController
@RequestMapping("/email")
public class EmailController {

public @ResponseBody ResponseEntity<String> sendMailCon(@RequestBody EmailRequestDto emailRequestDto) {
LOG.debug("calling method sendMail from controller ");
//do complex stuff
sendMailService.sendEmail(emailRequestDto);
return new ResponseEntity<>("Mail has been sent successfully", HttpStatus.OK);
}

服务类如下:

@Component
public class SendMailServiceImpl implements SendMailService {

private static final Logger LOG = LoggerFactory.getLogger(SendMailServiceImpl.class);

@Autowired
private JavaMailSender javaMailSender;
@Override
@Async("threadPoolExecutor")
public void sendEmail(EmailRequestDto emailRequestDto) {

LOG.debug("calling method sendMail do complex stuff");
...
}

我已按如下方式配置我的异步 bean:

@EnableAsync
@Configuration
public class AsyncConfig {

@Bean(name = "threadPoolExecutor")
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(25);
executor.setQueueCapacity(100);
executor.initialize();
return executor;
}

我的问题是 SendMailServiceImpl 上的注释 @Async 是正确的还是我需要将其添加到 Controller 的 sendMailCon 方法上?

最佳答案

基本上,@Async 将使方法在单独的线程中执行,即调用者不会等待被调用方法的完成。对服务器的每个请求都已由单独的线程提供服务,因此您无需在 Controller 方法上提供@Async

您可以将其保留在服务层或更好的另一层中,您实际上需要异步执行该方法。在您的情况下,您实际上可以将该方法保留为异步,使用休息模板来触发邮件。如果您没有另一个类,则可以将服务层方法保留为异步。

Read

关于java - Spring Boot Rest Rest API 上的异步 - 注释应该仅在服务或 Controller 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58133353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com