| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Quartz |
| Автор: cosmonaft 28.2.2008, 22:24 |
| Привет. Только начал разбираться с quartz. Есть такая задача: при старте приложения, достать различные настройки тригера из БД (время запуска, количество запусков, дни и т.д.), создать этот тригер, который в нужное время запустит job. И второе, есть веб-интерфейс, в котором эти настройки тригера можно менять. Подскажите пожалуйста, примерно, как это реализовать. Долго думал, пока ничего путного не придумал. |
| Автор: powerOn 28.2.2008, 22:52 |
| А в чем собственно проблема? В каком моменте у возникли сложности? Весь порядок действий вы описали, остаётся только реализовать... |
| Автор: cosmonaft 28.2.2008, 23:17 |
| Есть несколько вопросов, которые хотелось бы прояснить. Т.е. в web.xml прописать сервлет, который стартует вместе с приложением? А там в методе init() и создавать тригер? А что потом будет с этим сервелтом, отработал и висит себе дальше в памяти? А нормально ли, если действия по созданию тригера перенести в уже существующий сервлет quartz'a QuartzInitializerServlet? |
| Автор: Zamuta 29.2.2008, 11:26 | ||||||
cosmonaft,
Не надо в методе init создавать триггер, триггер(ы) создаёшь в отдельном классе, в бд только хранятся настройки. При запуске приложения настройки будут извлекаться из бд (время след. запуска, результат пред. выполнения и т.д.) и выполняться, при остановке выгружаться.
Странный у вас способ написния кода. Короче, он не для того писался. Сообщай о результатах. |
| Автор: cosmonaft 29.2.2008, 12:11 | ||||
Zamuta, я все-таки не понял. Код, что ты привел у меня прописан. Он, как я понимаю, для запуска самого планировщика.
Так я сделал такой класс. И где тогда при запуске приложения обратиться к объекту этого класса?
Опять же, я как раз и хочу узнать, где мне извлевкать эти настройки |
| Автор: Zamuta 29.2.2008, 13:00 | ||||
cosmonaft, например
Метод run() сохранит настройки в бд и запустит триггер. В след. раз нет необходимости запускать метод run(), т.к. настройки уже будут лежать в бд.
В коде это объекты JobDetail и CronTrigger. Для того чтобы кварц мог хранить настройки в бд сначала необходимо создать для этого таблицы, с которыми он будет работать и описать параметры соединения с бд в quartz.properties. Структуру таблиц для вашей бд можно найти в самом пакете quartz. quartz-1.6.0.zip\docs\dbTables . Это моё решение, применимо для моей ситуации. Вы можете сделать по другому исходя из ваших запросов, например почитав http://www.flazx.com/ebook5245.php |
| Автор: cosmonaft 29.2.2008, 14:17 |
| Zamuta, проблема в том, что нету специальных таблиц для кварца и нету JobStores. Есть таблицы, которые уже давно существуют и менять их, наверное, не будут. |
| Автор: Zamuta 29.2.2008, 14:56 |
| cosmonaft, а как ты тогда собираешься хранить настройки в бд, если у тебя нет к ней доступа? Значит храни в файле или в памяти. Можешь посмотреть в примерах, которые идут в пакете с кварцем. |
| Автор: cosmonaft 29.2.2008, 15:26 |
| Да не том смысле, что совсем нету доступа к базе |
| Автор: Zamuta 29.2.2008, 15:32 |
| cosmonaft, т.е. таблицы для триггеров есть, а для кварца нет? Это как? |
| Автор: cosmonaft 29.2.2008, 16:04 |
| Таблицы не для самих тригеров, а настройки различные по количеству запусков, дням запуска и т.д. Просто раньше предполагалось делать приложение без использования квраца, поэтому и остались поля в таблице для этого дела. Zamuta, я дико извиняюсь за свою непонятливость, но как класс MainCronTrigger, что ты привел создаст свой экземпляр и запустит метод run() при старте эппликейшена. |
| Автор: Zamuta 29.2.2008, 16:26 |
| cosmonaft, никак. Метод, run() ты можешь запустить вручную, но после этого твои настройки сохранятся в бд и при следующих запусках кварц будет смотреть в бд и решать что выполнять и когда. Твоя задача только указать инициализировать все триггеры со всеми настройками. |
| Автор: cosmonaft 29.2.2008, 17:00 |
| Ага, стало несколько прояснятся. Т.е. если я сразу в бд запихну все необходимые данные, то надобность в запуске того метода run() из MainCronTrigger отпадает вовсе (да и необходимость самого класса)? Я правильно понял? Тогда, похоже, все же придется настраивать JobStore и коннект с базой... |
| Автор: Zamuta 29.2.2008, 17:35 |
| cosmonaft, да всё правильно. |