Как запланировать метод по вызову - PullRequest
0 голосов
/ 24 апреля 2019

Как настроить метод для планирования с помощью вызова метода. Что именно я имею в виду. Добавив аннотацию @Scheduled, метод вызывается из стартового приложения.

Я хочу запустить этот метод с schedule (например, каждые 2 минуты), но только если программа вызывает этот метод, в противном случае этот метод не должен планироваться .

Может быть, есть другой способ сделать это? Еще одна аннотация? Если нет, то как это настроить?

1 Ответ

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

Используйте одну из реализаций 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, но вы можете написать его как лямбда-выражение.

...