java - 如何在提供给 CompletableFuture 的 ExecutorService 上调用关闭?
问题描述
我每 15 分钟运行一次批处理作业,在那里我获取 5 个不同事件的记录并将它们推送到 API,最终在移动设备上作为推送通知发出。
我正在使用 Java 8,带有 Quartz 调度程序的 Spring Boot 应用程序。
我有一个服务类,它从属性文件中读取不同的事件类型并循环访问这些事件类型,并通过工厂创建 5 个不同的控制器来处理这 5 个事件中的每一个。
我的问题是我在哪里调用 executor.shutdown 来关闭 ExecutorService?
这是我的程序的基本结构:
public class ServiceImpl {
ExecutorService executor = Executors.newFixedThreadPool(10);
for (Event event: eventTypes)
EventController eventController = eventFactory.createEventController(event);
eventController.executeTasks(executor);
}
}
public interface EventController {
EventBean executeTasks(ExecutorService executor);
EventBean transform1();
EventBean transform2();
}
public class EventController1 implements EventController {
public EventBean executeTasks(ExecutorService executor) {
CompletableFuture<List<Event1>> cf1 = CompletableFuture.supplyAsync(() -> {
//db call 1
}, executor);
CompletableFuture<EventBean1> combinedFuture = cf1
.thenCombineAsync(() -> {
//db call 2, independent from 1, hence called async
});
combinedFuture
.thenApply(e -> transform1())
.thenApply(e -> transform2())
}
}
public class EventController2 implements EventController {
public EventBean executeTasks(ExecutorService executor) {
CompletableFuture<List<Event2>> cf1 = CompletableFuture.supplyAsync(() -> {
//db call 1
}, executor);
CompletableFuture<EventBean1> combinedFuture = cf1
.thenCombineAsync(() -> {
//db call 2, independent from 1, hence called async
});
combinedFuture
.thenApply(e -> transform1())
.thenApply(e -> transform2())
}
}
public class EventController3 implements EventController {
public EventBean executeTasks(ExecutorService executor) {
CompletableFuture<List<Event3>> cf1 = CompletableFuture.supplyAsync(() -> {
//db call 1
}, executor);
CompletableFuture<EventBean1> combinedFuture = cf1
.thenCombineAsync(() -> {
//db call 2, independent from 1, hence called async
});
combinedFuture
.thenApply(e -> transform1())
.thenApply(e -> transform2())
}
}
解决方案
推荐阅读
- oop - 构建器模式和 LSP
- wordpress - WordPress 仪表板被锁定
- javascript - Visual Studio 中的“JavaScript (V3) 异常”是什么?
- python - 将列表值附加到数组
- c# - C# 如何将 DataTable 添加到 TabPage 控件
- hash - 为什么 crypto.subtle.digest 返回一个空对象
- c# - Is it possible to add a service from a controller or manager class other than the ConfigureService method
- java - Gradle 构建失败并出现 Java IOException
- single-page-application - 如何像这个一样快速加载网站?
- wordpress - WordPress, Nginx | wp-admin 返回 405 但我可以访问网站