Как запустить загрузочный планировщик Spring даже после executor.shutdownNow (); выполнение инструкции - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь реализовать загрузочный планировщик Spring для тестирования интерфейсов Callable и ExecutorService.

В моем приложении у меня есть:

@Bean("fixedThreadPool")
public ExecutorService fixedThreadPool() {
return Executors.newFixedThreadPool(5);
}

Тогда:

 **@Scheduled(fixedRate = 60000)**
public void removeUserIds(Set<String> userIds) {
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString("http://localhost:8080/remove");
final List<Callable<String>> callables = new ArrayList<>();  
userIds.forEach(userId -> {
    final List<Callable<String>> callables = new ArrayList<>();
    userIds.forEach(userId -> {
        final Callable<String> task = () -> {
            try{    
                    log.info("Calling service to remove user id node : "+userId);
                    callServiceToRemoveNode(url,userId);
            } catch(ServiceException e ){ 
                log.error("Error while calling service: "+e.getCause());
                **executor.shutdownNow();**

            }
            return "";
        }; //Call to remote service using RestTemplate
    callables.add(task);
});

try {
    final List<Future<String>> futureList =
        executor.invokeAll(callables);

    futureList.forEach(future -> {
        try {
            log.info(future.get());
        } catch (final Exception e) {
            log.error("Error : "+ e.getMessage());
        } 
    });
} catch (final Exception e) {
    log.error("Error Error Error : "+ e.getMessage());
} finally {
    executor.shutdown();
}
}

Когда я вызываю метод removeUserIds () с 100 userIds, он работает нормально в счастливом потоке, но если служба недоступна или не работает, ошибка выводится в сотый раз, и во избежание этого я использовал executor.shutdownNow (); так что дальнейший вызов не будет обслуживать другие идентификаторы пользователей. Но планировщик не работает и не выполняется после интервала времени, если выполняется оператор executor.shutdownNow (); . Не могли бы вы помочь мне найти решение, чтобы избежать отключения планировщика, так что даже после executor.shutdownNow (); оператор выполняется в до запуска планировщика, он должен работать? или предложить здесь возможное решение?

...