当前位置: 首页 > 知识库问答 >
问题:

如何在运行@Async任务时延迟应用程序关闭?

百里修真
2023-03-14

我有一个异步任务执行器。如何让Spring在所有任务完成之前等待应用程序关闭?

@Bean
public ThreadPoolExecutor singleExecutor() {
    return new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
            new ArrayBlockingQueue<>(10),
            new ThreadPoolExecutor.DiscardPolicy());
}


@Service
class MyService {
    @Async("singleExecutor")
    public void runAsync() {
     
    }
} 

共有1个答案

徐安康
2023-03-14

org.springframework.scheduling.concurrent.ThreadPoolTaskExec导师类(实现了TaskExec导师接口org.springframework.core.task.)通过以下方法支持请求的功能:

  • 设置waitfortaskstocompleteonshutton()

因此,请考虑迁移bean:

  • From:java。util。同时发生的ThreadPoolExecutor
  • 致:org。springframework。果心任务TaskExecutor

«迁移bean»示例:

@Bean
public TaskExecutor singleExecutor() {
    final ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
    taskExecutor.setCorePoolSize(1);
    taskExecutor.setMaxPoolSize(1);
    taskExecutor.setKeepAliveSeconds(0);
    taskExecutor.setQueueCapacity(10);
    taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
    taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
    taskExecutor.setAwaitTerminationSeconds(300);
    return taskExecutor;
}
 类似资料:
  • 是否有关于何时使用任务的好规则。延迟对线程。睡觉 具体来说,是否存在一个最低值,以确保其中一个有效/高效 最后,自任务。延迟会导致异步/等待状态机上的上下文切换,使用它会有开销吗

  • 在C#中,我有以下两个简单的例子: 第一个示例创建一个打印“开始”的任务,等待5秒钟打印“完成”,然后结束任务。我等待任务完成,然后打印“全部完成”。当我运行测试时,它会按预期运行。 第二个测试应该具有相同的行为,只是由于使用了async和Wait,任务内部的等待应该是非阻塞的。但是这个测试只打印“开始”,然后立即打印“全部完成”和“完成”,永远不会打印。 我不知道我为什么会有这样的行为:S非常感

  • 最初,我在运行拓扑时只分配了1个executor给QueryNormalizer。执行潜伏期为8.952,处理潜伏期为12.857。 为了更快,我将QueryNormalizer中的执行程序数更改为4。执行延迟更改为197.616,处理延迟更改为59.132。 根据执行延迟的定义-元组在执行方法中花费的平均时间。execute方法可以在不发送元组的Ack的情况下完成。 此外,处理延迟是否应始终低于

  • 我的gradle项目中有一个java主程序,我可以通过命令行使用gradle应用程序插件运行任务--args param new从gradle 4.9开始运行,如下所示: 我想在IntelliJ IDEA CE 2018.1中为同样的配置创建一个运行配置。 我在Run/Debug配置dilog中将任务字段指定为 当我运行这个运行配置时,我得到一个错误: 如何通过运行配置使此工作?

  • 我正在尝试将我的UIAlertViews更改为UIAlertController。我为它设置了这个操作: 但是,处理程序直到动作被点击大约一秒钟后才运行。有什么方法可以加快速度吗?

  • 问题内容: 如何在Python中进行时间延迟? 问题答案: 这是另一个示例,其中某件事大约每分钟运行一次: