quartz enterprise job scheduler |
Apr 7 |
краткие вкусовпечатления, так сказать
понравилась узкая специализированность и продуманность фреймворка - все, для решения необходимой задачи. Каждая задача характеризуется JobDetails - тут ее можно отнести к некоторой группе задач, дать этой задаче имя, и, собственно указать, что есть задача - указать на класс (что примечательно, т.к. экземпляр класа задачи создается именно в момент выполнения и раньше не засоряет систему. + определение задачи классом прочищает мозг и мотивирует делать правильную архитектуру
).
JobDetail jobDetail = new JobDetail("myJob", // job name
sched.DEFAULT_GROUP, // job group ('null' to use the default group)
DumbJob.class); // the java class to execute
Еще интересная штука - система календарей. Т.е. мы можем запустить scheduler (главный экземпляр механизма так сказать) с разными календарями - календарь с вырезанными выходными днями (Sun/Sat), с вырезанными праздниками, и собственный календарь, с вырезанными чем-угодно даже до минут
(Calendar - an interface to be implemented by objects that define spaces of time that should be included or excluded from a Trigger’s normal ‘firing’ schedule). Да, триггеры тоже интересная вещь - они задают время выполениния джоба (т.е. сам джоб и расписание его выполнения - совершенно разные штуки), причем триггеры весьма гибкие - есть даже подобие cron-a с сохранением синтаксиса (например “0 30 10-13 ? * WED,FRI”), но тут плюс - выполнение до секунд, в отличии от поминутного никсового крона. А, еще джобы интересно интерраптятся - прям по правилам threads - поток должен завершить работу сам, потому джоб (если может быть прерван по запросу) должен реализовать спец. интерфейс InterruptableJob - а там есть метод interrupt, который и нужно реализовать
красиво
плюс к этому всему - сохраниение джобов (в памяти, в базе, где-настроишь), листенеры на события - запуск джоба, пред-запуск, завершение работы и т.д.
т.е. довольно таки гибкий и удобный специализированный инструмент. мог в деталях ошибиться
tutorial тут