Spring scheduler — выполнение кода по расписанию

spring scheduler

Сегодня мы поговорим о возможности запускать выполнение кода по расписанию. Для этого будем пользоваться Spring @Sheduled анотацией.

Бывает, что выполнение кода нужно подогнать под некоторое время или запускать его с определенной периодичностью. В языке Java есть много способов сделать это. Сегодня я покажу один из самых простых и распространенных — @Sheduled. 

Для выполнения этого кода нам нужно простое Spring Boot приложение. Для этого идем на сайт start.spring.io и добавляем Web зависимость для нашего проекта. Это понадобиться для того, чтобы спринг подключил нам встроенный томкат и приложение работало в фоновом режиме:

генерация spring boot проекта

Это все зависимости которые нам нужны. Далее нужно нажать кнопку Generate Project. Должна начаться автоматическая загрузка. Распакуйте архив в удобную для Вас папку и откройте проект как Вы обычно открываете Maven проекты. У меня это в основном так:

открытие Maven проекта

Для того, чтобы разрешить использовать расписание в своем проекте необходимо на главный класс Spring Boot навешать аннотацию @EnableScheduling. Тем самым Вы укажите, что разрешаете шедулинг.

Вот полный код моего класса DemoApplication:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

Далее перейдем на написанию самого класса расписания. Для этого нужно создать новый класс. Я назову его SchedulerExample. Для того, чтобы класс стал частью шедулинга нужно повесить на него аннотацию @Component. Далее нужно просто создать метод и навешать на него аннотацию @Scheduled в параметр которой нужно указать время, через которое будет выполняться этот метод. Вот полный код моего класса-расписания:

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class SchedulerExample {

    //fixedRate in milliseconds
    @Scheduled(fixedRate = 3000)
    public void reportCurrentData() {
        System.out.println("Scheduler working: " + new Date());
    }
}

После запуска приложения Вы должны увидеть, как работает шедулер:

результат работы шедулера

Параметр аннотации @Scheduled принимает как fixedRate, так и cron.

Выражения Cron используются для настройки экземпляров CronTrigger, подкласса org.quartz.Trigger. Выражение cron — это строка, состоящая из шести или семи подвыражений (полей), которые описывают отдельные детали расписания.

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

Это вольный перевод официальной документации Oracle: https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

Если своими словами — cron это представление расписания в строковом представлении.

А если еще проще, то если переделать пример выше с fixedRate на cron — будет следующий код:

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class SchedulerExample {

    //fixedRate in milliseconds
   // @Scheduled(fixedRate = 3000)
    @Scheduled(cron = "*/3 * * * * *") // Формат:  секунда, минута, час, день, месяц, день недели
    public void reportCurrentData() {
        System.out.println("Scheduler working: " + new Date());
    }
}

С помощью выражения cron можно настроить выполнения кода на любое время, день недели, месяца или года. Выражение может показаться запутанным и сложным. У меня есть свое правило создания крон выражения: я просто гугулю нужное мне время и нахожу или онлайн составители cron выражений, или готовые ответы на stackoverflow.

Вот так просто пользоваться Spring scheduler и составлять выполнение кода по расписанию. Код очень простой и понятен поэтому выкладывать его на гитхаб не имеет смысла.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *