Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемЗоя Шлоссман
1 Vyacheslav Yakovenko Last update: March, 2012 Spring Framework Module 9 – Task Execution and Scheduling
2 2 Содержание Spring task and scheduling API; Quartz;
3 3 Spring :: Планировщики задач Назначение – выполнить задачу в определенный момент времени или через определенный промежуток времени. Существуют три основных API Javas Timer - запускается через определенные промежутки времени ; API Spring Framework пакеты: org.springframework.scheduling org.springframework.core.task Quartz scheduler: также может быть запущен через определенные промежутки времени ; может быть запущен в конкретный момент ;
4 4 Spring :: Task :: TaskExecutor В Spring Framework абстракция позволяющая организовать выполнение задач, базируется на интерфейсе TaskExecutor. TaskExecutor, предоставляет всего один метод void execute(Runnable task), позволяющий передать «задачу», имплементирующую интерфейс Runnable. TaskExecutor предоставляет функционал схожий с java.util.concurrent.Executor, единственная цель которого, абстрагироваться от Java 1.4
5 5 Spring :: Task :: TaskExecutor Реализации TaskExecutor : SimpleAsyncTaskExecutor не использует потоки повторно, каждый раз создавая новый поток; SyncTaskExecutor вызовы происходят в текущем потоке, не поддерживает асинхронное выполнение задач; ThreadPoolTaskExecutor – использует вызовы стандартного java.util.concurrent.ThreadPoolExecutor; ConcurrentTaskExecutor обертка на java.util.concurrent.Executor ; SimpleThreadPoolTaskExecutor наследник Quartz's SimpleThreadPool ; WorkManagerTaskExecutor использует CommonJ WorkManager (общий стандарт BEA и IBM);
6 6 public class TaskExecutorExample { private class MessagePrinterTask implements Runnable { private String message; public MessagePrinterTask(String message) { this.message = message; } public void run() { System.out.println(message); } private TaskExecutor taskExecutor; public TaskExecutorExample(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } public void printMessages() { for(int i = 0; i < 25; i++) { taskExecutor.execute( new MessagePrinterTask("Message" + i)); } Spring :: Task :: TaskExecutor
7
7
8 8 Spring :: Task :: TaskScheduler Spring 3 дополнительно, вводит новый интерфейс TaskScheduler: public interface TaskScheduler { ScheduledFuture schedule(Runnable task, Trigger trigger); ScheduledFuture schedule(Runnable task, Date startTime); ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period); ScheduledFuture scheduleAtFixedRate(Runnable task, long period); ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay); ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay); }
9 9 Spring :: Task :: TaskScheduler Основное достоинство этого интерфейса заключается в том, что он позволяет не привязываться к конкретной реализации планировщика. Это становится особенно важно, когда задача должна выполняться под управлением сервера приложений, где приложение не может самостоятельно порождать потоки. Для этих целей Spring предоставляет TimerManagerTaskScheduler, делегирующий выполнение задач в CommonJ TimerManager, получаемый обычно из JNDI.
10 10 Spring :: Task :: Trigger Интерфейс, также введенный в Spring 3. Основной идеей использования этого интерфейса, является то, что выполнение задачи должно базироваться на основе предыдущего выполнения, т.е. учитывая контекст. public interface Trigger { Date nextExecutionTime(TriggerContext triggerContext); } public interface TriggerContext { Date lastScheduledExecutionTime(); Date lastActualExecutionTime(); Date lastCompletionTime(); }
11 11 Spring :: Task :: Trigger Пример: scheduler.schedule(task, new CronTrigger("* * * MON-FRI")); Выполняется: Каджые 15 минут; С 9 до 17 ; С Пн по Пт ; Общий синтаксис: * * * * * command to be executed | | | | | | | | | day of week (0 - 6) (Sunday=0) | | | month (1 - 12) | | day of month (1 - 31) | hour (0 - 23) min (0 - 59)
12 12 Spring :: Task :: Namespace Spring 3 вводит дополнительный namespace task, позволяющий проинициализировать соответствующие бины в контексте приложения: А также включить автообнаружение компонент, проаннотированных с
13
13 Spring :: Task :: Пример Описание задач в контексте приложения:
14 14 Spring :: Task :: Пример Описание задач с использованием public void doSomething() { // something that should execute periodically public void doSomething() { // something that should execute periodically } * - методы должны быть объявлены - компоненте
15 15 Spring :: Task :: Пример Описание задач с использованием * * * * MON-FRI") public void doSomething() { // something that should execute on weekdays only }
16
16 Spring :: Task :: Quartz Одной из распространенных внешних библиотек для работы с задачами является Quartz, в которой для описания задачи используется интерфейс JobDetail Spring 3.1, предоставляет для этих целей фабрику JobDetailFactoryBean, работающую корректно, как с 1-ой, так и 2-й версией Quartz:
17 17 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов в общем случае:
18 18 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов: Поддерживает список триггеров, разных типов
19 19 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов: Описывает время, интервал / маску для запуска задачи
20 20 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов: Сами задачи могут быть полностью абстрагированы от API Quartz | Spring
21
21 Spring :: Task :: Пример
22 22 Упражнения : 10 : Использование планирования задач. – 30 мин – самостоятельная работа;
23 23 Вопросы!?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.