Java @与spring中的for循环异步

Java @与spring中的for循环异步,java,spring-boot,for-loop,asynchronous,Java,Spring Boot,For Loop,Asynchronous,我有下面的场景 有一些每日计算,可以追溯到几个月 这非常耗时,需要大量的计算 没有任何一天取决于其他任何一天的结果,每一天都是独立的 计算将从web API触发 所有结果将保存以供以后使用 所有方法都是无效的 所以,我在考虑一次计算多天的for循环,因为不需要知道其他几天的结果,但我不知道如何正确地进行 我应该将@Async注释放在哪里 JAX的方法如下所示: @POST @Consumes(MediaType.APPLICATION_JSON) @Path("/calculated") p

我有下面的场景

  • 有一些每日计算,可以追溯到几个月
  • 这非常耗时,需要大量的计算
  • 没有任何一天取决于其他任何一天的结果,每一天都是独立的
  • 计算将从web API触发
  • 所有结果将保存以供以后使用
  • 所有方法都是无效的
所以,我在考虑一次计算多天的for循环,因为不需要知道其他几天的结果,但我不知道如何正确地进行

我应该将
@Async
注释放在哪里

JAX的方法如下所示:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/calculated")
public void calculated(String req,
                         final @Context SecurityContext securityContext,
                         final @Suspended AsyncResponse response2) {

    logger.info("calculating");
    ThymeDate thymeDate =  parseJSONDate(req);

    thymeNewDateRange.getDataForDateRange(thymeDate, null);

}
这将把具有日期a和日期b的对象发送到
getDataForDaterRange
方法中,然后该方法将在a和b之间循环天数

 public void iterateOverDays(ThymeDate thymeDate) {
        for (LocalDate date : new DateRange(thymeDate.getDate_a(), thymeDate.getDate_b())) {
             ControlService.dailyCalculation(date, null);
        }
如前所述,
dailyCalculation
方法非常庞大,因此我不会为它粘贴代码,但它是一个包含许多计算的无效方法

我曾尝试将
@Async
放入
dailyCalculation
方法中,但应用程序开始跳过几天,并在某些天进行多次计算,似乎是随机的

我还尝试将其放入JAX和for循环方法中,这导致根本不使用async

我的AppConfig中有以下执行者:

@Bean
public Executor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(4);
    executor.setMaxPoolSize(4);
    executor.setQueueCapacity(500);
    executor.setThreadNamePrefix("calc-thread-");
    executor.initialize();
    return executor;
}

dailyCalculation
getdataforaterange
是否在同一个类中?上面有
@Async
的类,它是spring组件吗?您是否在
@springbootplication
@Configuration
类上启用了异步?它们不在同一类中。它认为@Service和component是一样的吗?是的,我已经启用了它,它是一个配置类。如果我在dailyCalculation上放置异步注释,它将启动多个线程,但开始跳过几天:(你能展示
getdataforaterange
方法,或者更好的是
thymeNewDateRange
类吗?你是否自动将
ControlService
连接到
thymeNewDateRange
中?你是否在spring boot应用程序.java中加入了enablesync?我会按照你最初的直觉,将异步注释放在符号的正上方日常计算的特性。它应该可以正常工作,您可以检查方法在每次迭代中使用的参数。