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触发
- 所有结果将保存以供以后使用
- 所有方法都是无效的
@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?我会按照你最初的直觉,将异步注释放在符号的正上方日常计算的特性。它应该可以正常工作,您可以检查方法在每次迭代中使用的参数。