Предисловие
Функция задачи времени реализована в Spring Boot. Вы можете использовать планирование задач, которое поставляется с пружиной, или вы можете использовать интегрированный кварц компонента Classic с открытым исходным кодом для достижения планирования задач.
Эта статья подробно расскажет о соответствующем контенте в реализации временных задач в Spring Boot и поделится им для вашей ссылки и обучения. Я не скажу многое ниже, давайте посмотрим на подробное введение вместе.
1. Весенний таймер
1. Метод выражения Cron
Использовать встроенные задачи времени очень просто. Вам просто нужно добавлять аннотации, такие как следующие, и вам не нужно наследовать какой -либо интерфейс обработки времени, например, обычная структура задачи времени. Простой пример кода заключается в следующем:
пакет com.power.demo.scheduledtask.simple; import com.power.demo.util.dateTimeUtil; import org.springframework.scheduling.antation.enablescheduling; импорт org.springframework.scheduling.annotation.scheduling; java.util.date;@component@enatorsCedulingPublic Class Springtaska {/** * Ссылка на выражение Cron: http://cron.qqe2.com/ **/@scheduled (cron = " */5 * * * *? } catch (Exception e) {e.printstackTrace (); } System.out.println (string.format ("((timercron)%s Выполняется каждые 5 секунд, регистрация", dateTimeutil.fmtdate (new Date ()))); }} SpringtaskaВ приведенном выше коде добавьте аннотацию @enablescheduling в класс, добавьте @schedulated в метод, настройте выражение Cron, и простая задача Cron Timing завершена. Ниже приведены компоненты выражения Cron:
@Scheduled (cron = "[секунды] [минуты] [часы] [день месяца] [месяц] [день недели] [Год]")
2. FixdRate и FixedDelay
Аннотация @Schedulale устраняет выражение Cron, и существуют другие методы конфигурации, такие как FixdRate и FixedDelay. Следующий пример реализует различные формы планирования задач с помощью различных методов конфигурации. Пример кода заключается в следующем:
пакет com.power.demo.scheduledtask.simple; import com.power.demo.util.dateTimeUtil; import org.springframework.scheduling.antation.enablescheduling; импорт org.springframework.scheduling.annotation.scheduling; java.util.date;@component@enablescedulingpublic class springtaskb { /*fixdrate: выполнить снова через 5 секунд после последнего времени* / @schedulated (fixdrate = 5000) public void timerfixedrate () {try {tread.sleep (100); } catch (Exception e) {e.printstackTrace (); } System.out.println (string.format ("(fixdRate) Текущее время: %s", dateTimeUtil.fmtdate (new Date ()))); } /*FixedDelay: выполнить 5 секунд после последней точки времени выполнения* / @Scheduled (fixedDelay = 5000) public void timerfixeddelay () {try {thread.sleep (100); } catch (Exception e) {e.printstackTrace (); } System.out.println (string.format ("(fixedDelay) Текущее время: %s", dateTimeUtil.fmtdate (new Date ()))); } /*Выполнить после первой задержки составляет 2 секунды, а затем выполняйте его каждые 5 секунд в соответствии с правилом FixedDelay* / @Scheduled (initialLay = 2000, fixedDelay = 5000) public void timerinitDelay () {try {thread.sleep (100); } catch (Exception e) {e.printstackTrace (); } System.out.println (string.format ("(initDelay) Текущее время: %s", dateTimeUtil.fmtdate (new Date ()))); }} SpringtaskbОбратите внимание на основные различия:
@Scheduled(fixedRate = 5000) : выполнить снова через 5 секунд после последнего времени выполнения
@Scheduled(fixedDelay = 5000) : выполнить снова через 5 секунд после последнего времени выполнения
@Scheduled(initialDelay=2000, fixedDelay=5000) : выполнить после первой задержки 2 секунды, а затем нажмите правило FixDDelay, чтобы выполнять каждые 5 секунд
Иногда многие проекты должны быть настроены и выполнены сразу после настройки запланированных задач, а initialdelay не требуется.
3. Зона
@Scheduled Annotation также имеет знакомую зону атрибута, указывающая часовой пояс. Обычно, если не написано, задача времени будет использовать часовой пояс по умолчанию сервера; Если ваша задача хочет работать в определенном часовом поясе и в определенном времени, например, общая многоязычная система может запускать сценарии для регулярного обновления данных, вы можете установить часовой пояс, такой как Восточная восьмая зона, которая может быть установлена на:
zone = "GMT+8:00"
2. Кварц
Quartz является одной из наиболее широко используемых структур планирования задач с открытым исходным кодом, и многие компании внедряют свои собственные системы управления задачами, основанные на нем. Quartz предоставляет два наиболее часто используемых триггера задачи времени, а именно Simplytrigger и Crontrigger. Эта статья принимает наиболее широко используемый Crontrigger в качестве примера.
1. Добавьте зависимости
<dependency> <groupid> org.quartz-scheduler </groupid> <artifactid> Quartz </artifactid> <sersive> 2.3.0 </version> </deperency>
2. Настройка выражений Cron
Как требуется для примера кода, добавьте следующую конфигурацию в файл Application.properties:
## Quartz Timeed Configuration Job.taska.cron = */3 * * * *? Job.taskb.cron = */7 * * * *??
На самом деле, мы можем написать его в коде или сохранить его в БД, а затем прочитать его без настройки.
3. Добавить временные задачи для реализации
Задача 1:
пакет com.power.demo.scheduledtask.quartz; import com.power.demo.util.dateTimeUtil; import org.quartz.disallocloncurrentexecution; импорт org.quartz.job; import.quartz.jobexecutioncontext; import org.quartz.jobexectionexexexexexexexexexexexexexexexexexexexexexex java.util.date; @DisallOnkConcurrentExecutionPublic Class Quartztaska реализует job {@Override public void выполнить (JobExeCutectOntext var1) бросает JobExeCuteException {try {think.sleep (1); } catch (Exception e) {e.printstackTrace (); } System.out.println (string.format ("(Quartztaska)%s Выполнение каждые 3 секунды, журнал журнала", datetimeUtil.fmtdate (new Date ()))); }} QuartztaskaЗадача 2:
пакет com.power.demo.scheduledtask.quartz; import com.power.demo.util.dateTimeUtil; import org.quartz.disallocloncurrentexecution; импорт org.quartz.job; import.quartz.jobexecutioncontext; import org.quartz.jobexectionexexexexexexexexexexexexexexexexexexexexexex java.util.date; @disalloalloncurrentexecutionpublic class quartztaskb реализует job {@override public void execute (jobexecutextontext var1) бросает JobExecutexexception {try {thread.sleep (100); } catch (Exception e) {e.printstackTrace (); } System.out.println (string.format ("(QuartzTaskb)%s Выполнение каждые 7 секунд, журнал журнала", dateTimeutil.fmtdate (new Date ()))); }} QuartztaskbСвоевременное отправление заданий по электронной почте:
пакет com.power.demo.scheduledtask.quartz; import com.power.demo.service.contract.mailservice; import com.power.demo.util.datetimeutil; импорт com.power.demo.util.powerlogger; import org.joda.time.dateTimetime; org.quartz.disallowconcurrentexecution; import org.quartz.job; import org.quartz.jobexecutioncontext; import org.quartz.jobexecutionexception; импорт org.springframework.beans.factory. реализует JOW {@Autowired Private MailService MailService; @Override public void execute (jobExecutioncontext var1) throws jobExecutionException {System.out.println (string.format ("(mailSendTask)%s отправлять почту каждые 5 секунд", dateTimeUtil.fmtdate (new Date ()))); попробуйте {//thread.sleep(1); Datetime dtnow = new DateTime (new Date ()); Date starttime = dtnow.minusmonths (1) .todate (); // месяц назад дата окончания = dtnow.plusdays (1) .todate (); mailservice.autosend (starttime, endtime); PowerLogger.info (string.format («Отправить почту, время начала: %s, время окончания: %s», datetimeUtil.fmtdate (startTime), dateTimeUutil.fmtdate (endtime))); } catch (Exception e) {e.printstackTrace (); PowerLogger.info (string.format ("Отправить почту, исключение происходит: %s, время конца: %s", e)); }}} MailSendTaskРеализация задач выглядит очень просто, просто наследуйте интерфейс задания Quartz и переписывает метод выполнения.
4. Интегрировать задачи времени кварца
Как сделать Spring автоматически распознавать инициализацию экземпляров задачи Quartz Timing? Это требует ссылки на весенние управляемые бобы, выявление необходимых бобов на пружинные контейнеры и автоматически вводя их путем определения фабрики работы.
Во -первых, добавьте класс завода в инъекционном заводе с пружиной:
пакет com.power.demo.scheduledtask.quartz.config; import org.quartz.spi.triggerfiredbundle; import org.springframework.beans.factory.config.autowirecapablebeanfactory; import org.spramework.context.applicationcontextextement; org.springframework.context.applicationcontextaware; import org.springframework.scheduling.quartz.springbeanjobfactory; открытый окончательный класс Autowirebeanjobfactory Extends Springbeanjobfactory Inirections ApplicationContextAware {личный трансенсионный AutoWireBabianBeanBainFactory; /*** Spring предоставляет механизм, который позволяет вам получать ApplicationContext, то есть интерфейс ApplicationContextAware* Для класса, который реализует интерфейс ApplicationContextAware, Spring создаст его и вызовет его* public voidSetApplicationContext (ApplicationContext ApplicationContext) Throws BeanSexception; Интерфейс, * передайте контекст, которому принадлежит бобы. **/ @Override public void setApplicationContext (final ApplicationContext context) {beanfactory = context.getautowirecapablebeanfactory (); } @Override Protected Object CreateJobinStance (Final TriggerFiredBundle Bundle) бросает исключение {final Object job = super.createJobinstance (bundle); beanfactory.autowirebean (работа); вернуть работу; }} AutowirebeanjobfactoryОпределите QuartzConfig:
пакет com.power.demo.scheduledtask.quartz.config; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.beans.factory.annotation.qualifier; импорт org.spramework.context.annotation.beantation. org.springframework.context.annotation.configuration; import org.springframework.scheduling.quartz.crontriggerfactorybean; импорт org.springframework.scheduling.quartz.schedulerfactorybean; @configuration Quartzconfig {@autowiretorybean; @Qualifier ("quartztaskatrigger") private crontriggerfactorybean quartztaskatrigger; @Autowired @qualifier ("quartztaskbtrigger") private crontriggerfactorybean quartztaskbtrigger; @Autowired @qualifier ("mailsendtrigger") private crontriggerfactorybean mailsendtrigger; // задание в Quartz автоматически вводит объект, размещенный в Spring Container @bean public autowirebeanjobfactory autowiringspringbeanjobfactory () {return new autowirebeanjobfactory (); } @Bean public pradelerfactorybeanbean schedulerfactorybean () {pradelerfactorybean scheduler = new SchedulerFactorybean (); scheduler.setJobfactory (AutoWiringSpringbeanJobfactory ()); // Настройка класса задания, внедренный Spring // Установить CrontriggerFactorybean и установить планировку Task Trigger.setTriggers (quartzTaskatrigger.getObject (), QuartzTaskBtrigger.getObject (), mailSendTrigger.getObject ()); вернуть планировщик; }} QuartzConfigДалее настройте детали задания:
пакет com.power.demo.scheduledtask.quartz.config; import com.power.demo.util.configutil; import com.power.demo.scheduledtask.quartz.mailsendtask; import Com.power.demo.scheduledTask.quartzska; com.power.demo.scheduledtask.quartz.quartztaskb; import com.power.demo.util.configutil; import org.springframework.context.nantation.bean; импорт org.springframework.context.annotation.configuration; импорт; org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;@Configurationpublic class TaskSetting { @Bean(name = "quartzTaskA") public JobDetailFactoryBean jobDetailAFactoryBean() { //Generate JobDetail JobDetailFactoryBean Factory = New JobDetailFactoryBean (); factory.setjobclass (quartztaska.class); // Установить соответствующую работу работы. factory.setname ("quartztaskajob"); Factory.SetDurability (false); factory.setDescription («Тестовая задача A»); вернуть фабрику; } @Bean (name = "quartztaskatrigger") public crontriggerfactorybean crontriggerafactorybean () {string cron = configutil.getConfigval (appfield.job_taska_cron); Crontriggerfactorybean stfactory = new crontriggerfactorybean (); // Установить jobdetail stfactory.setJobdetail (jobdetaIlaFactoryBean (). GetObject ()); stfactory.setStartdelay (1000); stfactory.setname ("quartztaskatrigger"); stfactory.setGroup ("quartztaskGroup"); stfactory.setCronexpression (cron); вернуть stactory; } @Bean (name = "quartztaskb") public jobdetailfactorybean jobdetailbfactorybean () {// генерировать JobDetail JobDetailFactoryBean factory = new JobDetailFactoryBean (); factory.setjobclass (quartztaskb.class); // Установить соответствующую работу работы. factory.setname ("quartztaskbjob"); Factory.SetDurability (false); factory.setDescription («Тестовая задача B»); вернуть фабрику; } @Bean (name = "quartztaskbtrigger") public crontriggerfactorybean crontriggerbfactorybean () {string cron = configutil.getConfigval (appfield.job_taskb_cron); Crontriggerfactorybean stfactory = new crontriggerfactorybean (); // Установить jobdetail stfactory.setJobdetail (jobDetailBfactoryBean (). GetObject ()); stfactory.setStartdelay (1000); stfactory.setname ("quartztaskbtrigger"); stfactory.setGroup ("quartztaskGroup"); stfactory.setCronexpression (cron); вернуть stactory; } @Bean (name = "mailsendtask") public jobdetailfactorybean jobdetailmailfactorybean () {// генерировать JobDetail JobDetailFactoryBean factory = new JobDetailFactoryBean (); factory.setjobclass (mailsendtask.class); // Установить соответствующую работу работы. factory.setname ("mailsendtaskjob"); Factory.SetDurability (false); factory.setDescription ("MailSendTrigger"); вернуть фабрику; } @Bean (name = "mailsendtrigger") public crontriggerfactorybean crontriggermailfactorybean () {string cron = configutil.getConfigval (appfield.job_taskmail_cron); Crontriggerfactorybean stfactory = new crontriggerfactorybean (); // Установить jobdetail stfactory.setJobdetail (jobDetailMailFactoryBean (). GetObject ()); stfactory.setStartdelay (1000); stfactory.setName ("mailSendTrigger"); stfactory.setGroup ("quartztaskGroup"); stfactory.setCronexpression (cron); вернуть stactory; }} TasksettingНаконец, запустите приложение для задачи Timing Boot Spring, и будет реализована полная задача времени на основе графика кварца.
В этом примере задания есть временная почта, отправляемая по отправке MailSendTask. Следующая статья поделится простой почтовой системой в приложении Spring Boot с использованием MongoDB в качестве среды хранения.
Расширенное чтение:
Многие компании имеют свою собственную структуру планирования задач и системы. Как интегрировать Quartz Cluster в Spring Boot для реализации динамической конфигурации задачи по времени?
См.
//www.vevb.com/article/139591.htm
//www.vevb.com/article/139597.htm
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.