在处理之前让Spring Boot API返回200

问题描述 投票:1回答:3

我有一个API,我不希望人们能够监视xh请求到api的时间长短取决于帐户是否有效。

问题是,如果他们想要收集用户ID,他们可以一遍又一遍地对API进行垃圾邮件,并且会发现真实ID需要更长时间才能返回响应。每次响应为200,页面对响应没有任何作用。

是否有一种简单的方法让Java Spring Boot应用程序立即返回200然后进行处理?

java spring rest spring-boot asynchronous
3个回答
4
投票

是的,您可以异步执行此操作。你只需要用@Controller注释你的@Asyncs方法。这将使该方法异步执行,因此不会阻止连接。代理返回Future,更多信息可以在docs找到。


1
投票

@Async是最简单的方式。

在主类中添加@EnableAsync注释(即带有@SpringBootApplication注释的主类)

将@Async添加到您想要在单独的线程中执行的方法中。

@Async的一些限制

  • 它必须应用于公共方法只能自我调用 - 调用
  • 同一个类中的异步方法 - 不起作用

1
投票

虽然@async会在这样的情况下来救你。这仍然可以以一种非常简洁的方式处理。

  1. 尝试在截取/过滤器中拦截请求,该过滤器只检查帐户的有效性并在没有到达控制器的情况下拒绝适当的请求。
  2. 在控制器上调用异步服务方法时,不要忘记提及核心线程池大小,最大线程池大小,队列长度属性,否则产生的线程数可能会耗尽VM的完整资源。
  3. 不要在存储库的嵌套事务方法上使用@async注释,因为@async的@async会混乱事务。

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.