2015-07-31 3 views
1

У меня есть ScheduledExecutorService, установленный для выполнения каждую минуту. Моя команда ловит все исключения, чтобы предотвратить работу службы-исполнителя. Однако по какой-то причине он иногда перестает работать (скажем, раз в несколько дней, возможно, когда приложение имеет больше трафика).ScheduledExecutorService перестает работать, даже если все исключения пойманы

Мой метод Отправной исполнителем услуг:

public void startExecutor(ScheduledExecutorService executor) { 
    Runnable job = new Runnable() { 
     @Override 
     public void run() { 
      doJob(); 
     } 
    }; 
    executor.scheduleAtFixedRate(job, 0, 1, TimeUnit.MINUTES); 
} 

ScheduledExecutorService инициализируется Dropwizard таким образом:

@Override 
public void run(NuvrProjectsAndRecordingsConfiguration configuration, Environment environment) throws Exception { 
    ScheduledExecutorService executor = environment.lifecycle().scheduledExecutorService("job").build(); 
} 

Dropwizard создает ScheduledThreadPoolExecutor реализацию с corePoolSize равным 1.

The doJob() метод уловов все исключения:

private void doJob() { 
    try { 
     worker.process(); 
    } catch (Exception e) { 
     LOGGER.error("Cannot perform job, will retry", e); 
    } 
} 

И метод process() обрабатывает регулярные исключения и имеет finally раздел:

public void process() { 
    try { 
     // some hard stuff 
    } catch (IOException ex) { 
     LOGGER.error("Processing of job failed", ex); 
    } catch (RuntimeException e) { 
     LOGGER.error("Unknown error during recording processor", e); 
    } finally { 
     // clean after processing 
    } 
} 

Что интересно, что иногда исключение из finally раздела.

Поскольку все операции защищены глобальной секцией исключения исключений - почему служба-исполнитель перестает работать?

+0

"* Иногда исключение исключается из раздела' finally' * * Что у вас есть в этом блоке? – user1803551

ответ

0

Возможно, вам придется поймать все Throwables, поскольку класс Exception не включает подкласс Error.

Смежные вопросы