事前に設定された間隔でユーザーにメールを送信するWebプロジェクトでQuartzSchedulerを使用しようとしています。この時点で、簡単な「helloworld」ステートメントを印刷できることを嬉しく思います。
これは、実行したいアプリケーションのコードです。
package testing;
import static org.quartz.JobBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.DateBuilder.*;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("MAIN!!!!");
try {
// Grab the Scheduler instance from the Factory
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run now, and then repeat every 40 seconds
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
scheduler.scheduleJob(job, trigger);
// and start it off
scheduler.start();
Thread.sleep(60000);
//scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
}
}
}
そしてこれは呼ばれるべき仕事です:
package testing;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
public HelloJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException
{
System.err.println("Hello! HelloJob is executing.");
System.out.println("HellowJob is executing");
}
}
これは私のquartz.propertiesファイルです:
org.quartz.scheduler.instanceName = QuartzTest
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
最後になりましたが、これは私がweb.xmlファイルに追加したものです。
<servlet>
<display-name>Quartz Initializer Servlet</display-name>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<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>
<init-param>
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
これで、プロジェクトが私のquartz.propertiesファイルを検出して読み取ることができると確信していますが、プロジェクト(つまりサーバー)がQuartzTest.javaについて何も知っていると信じる理由はありません。私はどこにもクラスを登録していません、そして同様にそれは決して呼ばれません。誰かが私がこれを行う方法を知っていますか?