Запланированная задача не останавливается, когда веб-сервер перезапускается dev-tools - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть эта проблема:

Я планирую запуск задачи каждые 10 минут.Когда он запустится, я ожидаю получить два письма от двух неудачных проверок.

Однако, когда я редактирую свой проект, dev-tools фиксируют изменения и перезапускают весеннее приложение.Но вот проблема: я все еще получаю электронные письма от старого запущенного приложения.

Что я могу сделать, чтобы правильно завершить работу приложения?Боюсь, что эта проблема также повлияет на производственную среду.

Код:

<code>@Component
public class CheckRunner implements Runnable {
    private static final Logger log = LoggerFactory.getLogger(CheckRunner.class);

    private static boolean runOnce = true;

    private final long DEFAULT_CHECKING_INITIAL = 1L;
    private final long DEFAULT_CHECKING_PERIOD = 10L;

    @Autowired
    public EmailServiceImpl emailService;

    /**
     * Construct and schedule a CheckRunner 
     */
    public CheckRunner() {
        if(runOnce) {
            runOnce = false;
            log.info("Starting check runner.");
            ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
            exec.scheduleAtFixedRate(this, DEFAULT_CHECKING_INITIAL , DEFAULT_CHECKING_PERIOD, TimeUnit.MINUTES);
        }
    }

    /**
     * Run the checks once
     */
    @Override
    public void run() {
        log.info("Checking thread running.");
        checks();
    }

    /**
     * Do the checks
     */
    private void checks() {
        StringBuilder sb = new StringBuilder();
        //sb.append("<pre>");
        WebServerAvailablityCheck.runAllChecks(sb, emailService);
        //sb.append("
");}}

1 Ответ

0 голосов
/ 07 февраля 2019

Если вы реализуете java.io.Closeable для вашего CheckRunner компонента и вызываете shutdown() для исполнителя из него, Spring вызовет Closeable.close(), когда компонент будет уничтожен.Это приведет к тому, что ваш поток исполнителя изящно закроется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...