Quartzで複数のジョブを実行する例

Quartzで複数のジョブを実行する例

この例では、Quartz API、Quartz XML、Springを介して複数のQuartzジョブを宣言する方法を示します。 Quartzスケジューラフレームワークでは、各ジョブは一意のトリガーに接続され、スケジューラーによって実行されます。

P.S In Quartz, one trigger for multiple jobs is not possible. (これが間違っている場合は修正してください。)

1. Quartz API

Quartzの3つのジョブ、JobA、Job、およびJobSを作成します。

package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobA implements Job {

    @Override
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        System.out.println("Job A is runing");
    }

}
package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobB implements Job {

    @Override
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        System.out.println("Job B is runing");
    }

}
package com.example.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobC implements Job {

    @Override
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        System.out.println("Job C is runing");
    }

}

Quartz APIを使用して、3つの特定のトリガーに割り当てられた3つ以上のジョブを宣言し、スケジュールします。

package com.example.quartz;

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class CronTriggerExample {
    public static void main( String[] args ) throws Exception
    {

    JobKey jobKeyA = new JobKey("jobA", "group1");
        JobDetail jobA = JobBuilder.newJob(JobA.class)
        .withIdentity(jobKeyA).build();

        JobKey jobKeyB = new JobKey("jobB", "group1");
        JobDetail jobB = JobBuilder.newJob(JobB.class)
        .withIdentity(jobKeyB).build();

        JobKey jobKeyC = new JobKey("jobC", "group1");
        JobDetail jobC = JobBuilder.newJob(JobC.class)
        .withIdentity(jobKeyC).build();


        Trigger trigger1 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName1", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Trigger trigger2 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName2", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Trigger trigger3 = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName3", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();

        Scheduler scheduler = new StdSchedulerFactory().getScheduler();

        scheduler.start();
        scheduler.scheduleJob(jobA, trigger1);
        scheduler.scheduleJob(jobB, trigger2);
        scheduler.scheduleJob(jobC, trigger3);

    }
}

出力

Job A is runing //every 5 seconds
Job B is runing
Job C is runing
Job A is runing //every 5 seconds
Job B is runing
Job C is runing

2. Quartz XMLの例

XMLファイルの同等のバージョン。 「quartz.properties」と「quartz-config.xml」がプロジェクトのクラスパスにあることを確認してください。

ファイル–quartz.properties

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
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



    
        
            JobA
            GroupDummy
            This is Job A
            com.example.quartz.JobA
        

        
            
                dummyTriggerNameA
                JobA
                GroupDummy
                
                0/5 * * * * ?
            
        
    

    
        
            JobB
            GroupDummy
            This is Job B
            com.example.quartz.JobB
        

        
            
                dummyTriggerNameB
                JobB
                GroupDummy
                
                0/5 * * * * ?
            
        
    

ファイル:web.xml



    
       org.quartz.ee.servlet.QuartzInitializerListener
   

3. 春の例

Springの同等バージョン。

package com.example.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobA extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext arg0)
        throws JobExecutionException {
        System.out.println("Job A is runing");
    }

}
package com.example.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobB extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext arg0)
        throws JobExecutionException {
        System.out.println("Job B is runing");

    }

}
package com.example.job;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class JobC extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext arg0)
        throws JobExecutionException {
        System.out.println("Job C is runing");

    }

}

File : Spring-Quartz.xml – Spring XMLBean構成ファイルでジョブとトリガーを宣言します。



    
    
    

    
    
        
    

    
        
    

    
        
    

    
    
        
        
    

    
        
        
    

    
        
        
    

    
        
            
                
                
                
            
        
    

それを実行します

package com.example.common;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) throws Exception {
        new ClassPathXmlApplicationContext("Spring-Quartz.xml");

    }
}

出力。

INFO: Starting beans in phase 2147483647
Jul 30, 2012 10:38:13 PM org.springframework.scheduling.quartz.SchedulerFactoryBean startScheduler
INFO: Starting Quartz Scheduler now
Job A is runing
Job B is runing
Job C is runing
Job A is runing
Job B is runing
Job C is runing

ソースコードをダウンロード

ダウンロード–Multiple-Jobs-in-Quartz-Spring-Example.zip(25kb)