在处理之前让SpringBoot API返回200

时间:2019-03-06 19:38:20

标签: java spring rest spring-boot asynchronous

我有一个API,我不希望人们能够监视对api的xhr请求所花费的时间,具体取决于帐户是否有效。

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

@Async是最简单的方法。

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

向要在单独线程中执行的方法中添加@Async。

@Async的某些限制

  • 它只能应用于自调用–调用的公用方法
  • 同一类中的异步方法–不起作用

答案 2 :(得分:1)

@async在这种情况下会为您提供帮助。仍然可以以一种非常整洁的方式来处理它。

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

干杯!