石英调度器不是 运行
Quartz Scheduler not running
我想在我的网络应用程序中每五秒 post 一条消息,我正在使用 Quatz 来安排此任务。这是我的代码
public class InvoiceGenerationSchedular implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Listener is off");
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Listener initialized.");
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
//schedule it
Scheduler scheduler;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
class HelloJob implements Job
{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Hello Quartz!");
}
}}
我的 web.xml 是
<servlet>
<servlet-name>InvoiceGenerationServlet</servlet-name>
<servlet-class>InvoiceGenerationSchedular</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InvoiceGenerationServlet</servlet-name>
<url-pattern>/InvoiceGenerationServlet</url-pattern>
</servlet-mapping>
<listener>
<listener-class>InvoiceGenerationSchedular</listener-class>
</listener>
现在的问题是每次我 运行 它只给我输出的代码
侦听器已初始化
仅此而已,虽然我希望它每 5 秒打印一次 "Hello Quartz" 但它什么也没打印。我不明白为什么,也不给我任何例外。我对 Quartz 很陌生,所以我不知道如何解决这个问题。我当然先用谷歌搜索了我的问题,但没有得到太多答案。
尝试像这样在触发器构建器中添加 forJob(job) -
TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.forJob(job)//<--- this line is the new addition
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
我不敢相信我无缘无故浪费了 2 个小时。
我得到了答案,我只是在另一个文件中创建了一个单独的 HelloJob class 然后它起作用了,但是当我在主 class 中有 class 时它不起作用。但我不明白原因,这有什么区别??
有人能回答吗?
或者,为了能够使用嵌套 class,您只需将其声明为 static
我想在我的网络应用程序中每五秒 post 一条消息,我正在使用 Quatz 来安排此任务。这是我的代码
public class InvoiceGenerationSchedular implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Listener is off");
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Listener initialized.");
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
//schedule it
Scheduler scheduler;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
class HelloJob implements Job
{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Hello Quartz!");
}
}}
我的 web.xml 是
<servlet>
<servlet-name>InvoiceGenerationServlet</servlet-name>
<servlet-class>InvoiceGenerationSchedular</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InvoiceGenerationServlet</servlet-name>
<url-pattern>/InvoiceGenerationServlet</url-pattern>
</servlet-mapping>
<listener>
<listener-class>InvoiceGenerationSchedular</listener-class>
</listener>
现在的问题是每次我 运行 它只给我输出的代码
侦听器已初始化
仅此而已,虽然我希望它每 5 秒打印一次 "Hello Quartz" 但它什么也没打印。我不明白为什么,也不给我任何例外。我对 Quartz 很陌生,所以我不知道如何解决这个问题。我当然先用谷歌搜索了我的问题,但没有得到太多答案。
尝试像这样在触发器构建器中添加 forJob(job) -
TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.forJob(job)//<--- this line is the new addition
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
我不敢相信我无缘无故浪费了 2 个小时。 我得到了答案,我只是在另一个文件中创建了一个单独的 HelloJob class 然后它起作用了,但是当我在主 class 中有 class 时它不起作用。但我不明白原因,这有什么区别?? 有人能回答吗?
或者,为了能够使用嵌套 class,您只需将其声明为 static