0

事前に設定された間隔でユーザーにメールを送信する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について何も知っていると信じる理由はありません。私はどこにもクラスを登録していません、そして同様にそれは決して呼ばれません。誰かが私がこれを行う方法を知っていますか?

4

1 に答える 1

0

それは素晴らしいです !Quartzはすでに正常にブートストラップされています。

不足しているのは、どのジョブをいつ実行するかを定義する必要があるということです。これを行うには、でXMLSchedulingDataProcessorPluginを構成しますquartz.properties。このプラグインは、ジョブを追加するためにユーザーが定義したpaticaulr XMLファイルをロードし、クォーツスケジューラーが初期化されたときにトリガーを使用してそれらをスケジュールします。(スキーマ定義については、ここを参照してください)

quartz.properties、次のプロパティを追加します。

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true

次に、quartz-config.xmlで:

 <?xml version="1.0" encoding="UTF-8"?>

        <job-scheduling-data
            xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
            version="1.8">

            <schedule>
                <job>
                    <name>MyScheduledJob</name>
                    <group>MyScheduledGroup</group>
                    <description>Testing</description>
                    <job-class>testing.HelloJob</job-class>
                </job>

                <trigger>
                        <cron>
                                <name>HelloJobTrigger</name>
                                <job-name>MyScheduledJob</job-name>
                                <job-group>MyScheduledGroup</job-group>
                                <!-- It will run every 5 minutes -->
                                <cron-expression>0 0/5 * * * ?</cron-expression>  
                        </cron>
                  </trigger>
            </schedule>
    </job-scheduling-data>
于 2012-04-16T07:11:25.677 に答える