问题描述
我每 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 (将#修改为@)