如何解决如何在已提供给 CompletableFuture 的 ExecutorService 上调用关闭?
我每 15 分钟运行一次批处理作业,在那里我获取 5 个不同事件的记录并将它们推送到 API,最终在移动设备上作为推送通知发出。
我正在使用 Java 8、带有 Quartz 调度程序的 Spring 启动应用程序。
我有一个服务类,它从属性文件中读取不同的事件类型,并循环遍历这些类型,并通过工厂创建 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
},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
},hence called async
});
combinedFuture
.thenApply(e -> transform1())
.thenApply(e -> transform2())
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。