#java #spring-boot #scheduler
#java #весенняя загрузка #планировщик
Вопрос:
Как настроить метод, который будет запланирован вызывающим методом. Что я именно имею в виду. Добавление аннотации @Scheduled
, метод вызывается из приложения start.
Я хочу запускать этот метод с schedule
(например, каждые 2 минуты), но только если программа вызывает этот метод, иначе этот метод не должен быть запланирован.
Может быть, есть другой способ сделать это? Еще одна аннотация? Если нет, то как это настроить?
Комментарии:
1. Затем вы можете использовать планировщик для вызывающего метода.
2. @PawanTiwari можете ли вы привести пример?
3. Решение не настолько длинное, чтобы оно было ответом, однако вы можете использовать аннотацию @schedule для вашего вызывающего метода, на который вы хотите получить ответ от вызывающего метода.
Ответ №1:
Используйте одну из реализаций Spring TaskScheduler.
//Somewhere define the desired scheduler.
@Bean
public ThreadPoolTaskScheduler threadPoolTaskScheduler(){
ThreadPoolTaskScheduler threadPoolTaskScheduler
= new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.setPoolSize(5);
threadPoolTaskScheduler.setThreadNamePrefix(
"ThreadPoolTaskScheduler");
return threadPoolTaskScheduler;
}
// define the task you want to run
class RunnableTask implements Runnable{
private String message;
public RunnableTask(String message){
this.message = message;
}
@Override
public void run() {
System.out.println(new Date() " Runnable Task with " message
" on thread " Thread.currentThread().getName());
}
}
// to schedule:
taskScheduler.scheduleAtFixedRate(new RunnableTask("Fixed Rate of 2 seconds") , 2000);
Спасибо Baeldung
Основная идея состоит в том, чтобы иметь какой-то планировщик, определенный в ApplicationContext (т. Е. в виде компонента). Затем в вашей логике (где вы хотите отправить повторяющуюся задачу) вы автоматически подключаете этого исполнителя и отправляете задачу.
В качестве альтернативы, если выражение, которое вы хотите запустить, не имеет состояния, вам необязательно иметь класс, реализующий Runnable
, но вы можете записать его как лямбда-выражение.