Vyacheslav Yakovenko Last update: March, 2012 Spring Framework Module 9 – Task Execution and Scheduling.

Презентация:



Advertisements
Похожие презентации
1 © Luxoft Training 2013 Spring Framework Module 9 Task Execution and Scheduling.
Advertisements

Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 4 – JNDI.
Evgeniy Krivosheev Last update: March, 2012 Spring Framework Module 10 – JMS, EJB.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Рассматриваемые темы EJB Timer сервис Создание таймера Отмена и сохранение таймера Получение информации о таймере Транзакции и таймеры 11-1.
Evgeniy Krivosheev Vyacheslav Yakovenko Last update: Feb, 2012 Spring Framework Module 4 – DAO, JDBC.
Рассматриваемые темы Подсистема безопасности сервера приложений Конфигурация безопасности в EJB Сервисы авторизации и аутентификации в Java 2-1.
Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
1 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-1 Механизм Reflection.
Асинхронное взаимодействие Java Execution Framework Сравнение производительности Асинхронные вызовы в Glassfish Кислин Григорий.
Рассматриваемые темы Введение в Web Services EJB и Web Services 2-1.
Что такое паттерны (шаблоны) проектирования? Эффективные способы решения характерных задач проектирования Обобщенное описание решения задачи, которое.
Обзор возможностей Инверсия управления Аспектно-ориентированное программирование.
Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
Параллелизм и потоки в Java For students of university Author: Oxana Dudnik.
ENTERPRISE JAVABEANS 3.0 STATEFUL & STATLESS SESSION BEANS.
Уровень представления Apache Struts Framework Библиотека тэгов.
1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
Рассматриваемые темы Технология EJB Типы EJB Вызов EJB Сборка и развертывание EJB- приложения 2-1.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Транксрипт:

Vyacheslav Yakovenko Last update: March, 2012 Spring Framework Module 9 – Task Execution and Scheduling

2 Содержание Spring task and scheduling API; Quartz;

3 Spring :: Планировщики задач Назначение – выполнить задачу в определенный момент времени или через определенный промежуток времени. Существуют три основных API Javas Timer - запускается через определенные промежутки времени ; API Spring Framework пакеты: org.springframework.scheduling org.springframework.core.task Quartz scheduler: также может быть запущен через определенные промежутки времени ; может быть запущен в конкретный момент ;

4 Spring :: Task :: TaskExecutor В Spring Framework абстракция позволяющая организовать выполнение задач, базируется на интерфейсе TaskExecutor. TaskExecutor, предоставляет всего один метод void execute(Runnable task), позволяющий передать «задачу», имплементирующую интерфейс Runnable. TaskExecutor предоставляет функционал схожий с java.util.concurrent.Executor, единственная цель которого, абстрагироваться от Java 1.4

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 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 <bean id="taskExecutor class="org.springframework.scheduling.concurrent. ThreadPoolTaskExecutor"> Spring :: Task :: TaskExecutor

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 Spring :: Task :: TaskScheduler Основное достоинство этого интерфейса заключается в том, что он позволяет не привязываться к конкретной реализации планировщика. Это становится особенно важно, когда задача должна выполняться под управлением сервера приложений, где приложение не может самостоятельно порождать потоки. Для этих целей Spring предоставляет TimerManagerTaskScheduler, делегирующий выполнение задач в CommonJ TimerManager, получаемый обычно из JNDI.

10 Spring :: Task :: Trigger Интерфейс, также введенный в Spring 3. Основной идеей использования этого интерфейса, является то, что выполнение задачи должно базироваться на основе предыдущего выполнения, т.е. учитывая контекст. public interface Trigger { Date nextExecutionTime(TriggerContext triggerContext); } public interface TriggerContext { Date lastScheduledExecutionTime(); Date lastActualExecutionTime(); Date lastCompletionTime(); }

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 Spring :: Task :: Namespace Spring 3 вводит дополнительный namespace task, позволяющий проинициализировать соответствующие бины в контексте приложения: А также включить автообнаружение компонент, проаннотированных с

13 Spring :: Task :: Пример Описание задач в контексте приложения: <task:scheduled ref="someObject" method="someMethod" fixed-rate="5000"/> <task:scheduled ref="anotherObject" method="anotherMethod" cron="*/5 * * * * MON-FRI"/>

14 Spring :: Task :: Пример Описание задач с использованием public void doSomething() { // something that should execute periodically public void doSomething() { // something that should execute periodically } * - методы должны быть объявлены - компоненте

15 Spring :: Task :: Пример Описание задач с использованием * * * * MON-FRI") public void doSomething() { // something that should execute on weekdays only }

16 Spring :: Task :: Quartz Одной из распространенных внешних библиотек для работы с задачами является Quartz, в которой для описания задачи используется интерфейс JobDetail Spring 3.1, предоставляет для этих целей фабрику JobDetailFactoryBean, работающую корректно, как с 1-ой, так и 2-й версией Quartz: <bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">

17 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов в общем случае:

18 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов: Поддерживает список триггеров, разных типов

19 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов: Описывает время, интервал / маску для запуска задачи

20 Spring :: Task :: Quartz SchedulerFactoryBean SimpleTriggerFactoryBean CronTriggerFactoryBean Job 1 Job 2 Job 3 Job 4 Job N Схема взаимодействия бинов: Сами задачи могут быть полностью абстрагированы от API Quartz | Spring

21 Spring :: Task :: Пример <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <bean id="reportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">

22 Упражнения : 10 : Использование планирования задач. – 30 мин – самостоятельная работа;

23 Вопросы!?