безопасно использовать jdk ScheduledExecutorService в приложении Spring - PullRequest
0 голосов
/ 08 апреля 2020

В простых java приложениях ExecutorServices необходимо завершить, чтобы приложение завершилось, например:

    public static void main(String[] args) throws StoreException {
        final ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService
                .submit((Callable<Void>) () -> {
                    Thread.sleep(2000);
                    System.out.println("parallel");
                    return null;
                 });
      // JVM does not shutdown unless calling executorService.shutDown()
      // executorService.shutDown();
    }

Также см. Причина вызова shutdown () для ExecutorService

Так что же происходит в серверном приложении (например, с использованием Spring), если какой-либо класс создает повторяющуюся задачу, подобную этой:

public class MyClass {

    public MyClass() {
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        scheduledExecutorService
                .scheduleAtFixedRate(() -> {
                    System.out.println("parallel");
                 }, 2000, 2000, TimeUnit.SECONDS);
    }
}

Должен ли я связать завершение shutdownExecutorService при завершении работы приложения ? Или, скорее, должны использовать средства планирования Springs?

Что, если ExecutorService является Spring Bean?

...