Настройка приложения-планировщика, а не сервера - PullRequest
0 голосов
/ 10 апреля 2019

Нам нужно привязать поток планировщика к контексту приложения.

Я пытался использовать @PostConstruct, но он запускает планировщик, когда приложение работает, но продолжает работать в фоновом режиме, даже если приложение не работает, а сервер работает.вверх.

Если приложение не работает, планировщик также должен остановиться.

1 Ответ

0 голосов
/ 10 апреля 2019

То, как я использовал Scheduler в Spring (то есть Spring Boot), заключается в том, чтобы в моем проекте было два класса (и, следовательно, они включены в мой .jar после сборки).

1 - SchedulerConfig (необходимо для конфигурации)

@Configuration
public class SchedulerConfig implements SchedulingConfigurer {

    private final int POOL_SIZE = 10;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
        threadPoolTaskScheduler.setThreadNamePrefix("my-scheduled-task-pool-");
        threadPoolTaskScheduler.initialize();

        scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }   
}

2 - ScheduledTasks (фактические запланированные задачи с частотой, определяемой выражением cron)

@Component
public class ScheduledTasks {

    private static final Logger LOG = Logger.getLogger(ScheduledTasks.class);

    @Scheduled(cron = "0 0 * ? * *")
    public void doSomething() { 
        // Do something
    }
}

Следовательно, как и всевключается в работающий .jar, когда приложение больше не развертывается, запланированные задачи также не будут запускаться.

См. также https://www.baeldung.com/spring-scheduled-tasks

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