如何在已提供给 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 (将#修改为@)