Запланированные задачи в пристани - PullRequest
3 голосов
/ 10 февраля 2011

Я хотел бы написать простой Groovlet, который периодически запускает задачу и использует контейнер Jetty.Какой самый простой способ выполнить эту задачу?Я думаю, что следует использовать Quartz, но я не уверен, как он интегрируется с Jetty.Нужно ли создавать панель управления для запуска и остановки задач?Есть ли простые примеры, на которые я могу взглянуть, чтобы начать?

Ответы [ 3 ]

5 голосов
/ 10 февраля 2011

Более простым решением, чем Quartz, является использование классов Timer и TimerTask, предоставляемых JDK.Они не предоставляют столь разнообразных вариантов планирования, но если вы просто хотите запускать задачу с фиксированными интервалами, их должно быть достаточно.

Если вам нужна консоль для остановки запуска задачи, выЛибо вам нужно написать это самостоятельно, либо написать компонент JMX, обеспечивающий доступ к Таймеру, и использовать консоль JMX для его вызова.

2 голосов
/ 10 февраля 2011

Вам необходимо создать файл конфигурации задания "jobconf.xml" или файл свойств, в котором должны быть настроены задания.Этот файл должен быть добавлен либо в путь к классу приложения, либо в причал.

Вы должны добавить QuartzInitializer в ваш web.xml и параметры сервлета, как показано ниже:

<web-app>
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<display-name>Quartz Initializer Servlet</display-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value>
</init-param>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>

<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>

</servlet>

<servlet>
<servlet-name>first</servlet-name>
<servlet-class>com.v2sol.StartQuartz</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/fst</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>one</servlet-name>
<servlet-class>com.v2sol.ExcelDBServlet</servlet-class>
<init-param>
<param-name>cronExpr</param-name>
<param-value>0,30 * * ? * MON-FRI</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>one</servlet-name>
<url-pattern>/excel</url-pattern>
</servlet-mapping>


</web-app>

и планировщик использования в вашем сервлете:

System.out.println("Initializing Scheduler PlugIn for Jobs!");
super.init(config);
ServletContext ctx = config.getServletContext();
Scheduler scheduler = null;
StdSchedulerFactory factory = (StdSchedulerFactory) 
ctx.getAttribute(QuartzInitializerServlet.QUARTZ_FACTORY_KEY);  

try {   
scheduler = factory.getScheduler();
JobDetail jd = new JobDetail("job1", "group1",ExcelJob.class);  
CronTrigger cronTrigger = new CronTrigger("trigger1","group1");
String cronExpr = null;
cronExpr = getInitParameter("cronExpr");
System.out.println(cronExpr);   
cronTrigger.setCronExpression(cronExpr);
scheduler.scheduleJob(jd, cronTrigger);
System.out.println("Job scheduled now ..");

} catch (Exception e){
e.printStackTrace();
}
0 голосов
/ 10 февраля 2011

Создайте планировщик Quartz и поместите его в контекст приложения. Любой Groovlet будет иметь к нему доступ и сможет отправлять новые задачи и управлять запущенными.

...