【发布时间】:2019-02-15 20:55:41
【问题描述】:
我在Spring Boot中配置了一个执行器服务如下:
@Configuration
@PropertySource({ "classpath:executor.properties" })
public class ExecutorServiceConfig {
@Value("${"executor.thread.count"}")
private int executorThreadCount;
@Bean("executorThreadPool")
public ThreadPoolExecutor cachedThreadPool() {
return new ThreadPoolExecutor(executorThreadCount, executorThreadCount, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
}
}
应用部署在独立的 Tomcat 实例上。当Tomcat服务器关闭时,我发现队列中还有未完成的任务。结果,我会丢失数据。有没有办法让我在这个执行程序服务上调用 awaitTermination 以便它有机会完成队列中的内容?谢谢!
【问题讨论】:
-
我确定有——但是现在如果 Tomcat 服务器或 Java 应用程序崩溃了怎么办?如果队列中的信息很重要,我会努力维护队列的持久性(不是一个词......但你知道我的意思吗?)——这样当 Java 应用程序重新启动时,它可以填充队列与未完成的项目。我知道这根本不能回答你的问题——对此我很抱歉!祝你的项目好运!
-
谢谢@Andrew。你的问题是合法的。如果 - 上帝保佑 - 系统崩溃,这些任务是我可以承受的。但是,我想避免在正常关机期间丢失数据。
标签: java spring spring-boot executorservice shutdown