Рубрики
Без рубрики

Пример выполнения нескольких заданий в Quartz

– Пример выполнения нескольких заданий в Quartz

В этом примере мы покажем вам, как объявить несколько заданий Quartz с помощью API Quartz, XML Quartz и Spring. В структуре планировщика Quartz каждое задание будет прикреплено к уникальному триггеру и запущено планировщиком.

P.S В Quartz один триггер для нескольких заданий невозможен. (Поправьте меня, если это неправильно.)

1. API-интерфейсы кварца

Создайте 3 рабочих места Quartz, JobA, JobB и JobC.

package com.mkyong.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.mkyong.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.mkyong.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");
	}

}

Используйте API-интерфейсы Quartz, чтобы объявить выше 3 заданий, назначенных 3 определенным триггерам, и запланировать их.

package com.mkyong.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. Пример XML-кода Quartz

Эквивалентная версия в XML-файле. Убедитесь, что “кварц.свойства” и “quartz-config.xml “расположены по пути к классу проекта.

Файл – quartz.свойства

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.mkyong.quartz.JobA
		

		
			
				dummyTriggerNameA
				JobA
				GroupDummy
				
				0/5 * * * * ?
			
		
	
	
	
		
			JobB
			GroupDummy
			This is Job B
			com.mkyong.quartz.JobB
		

		
			
				dummyTriggerNameB
				JobB
				GroupDummy
				
				0/5 * * * * ?
			
		
	

Файл: web.xml




    
       org.quartz.ee.servlet.QuartzInitializerListener
   


3. Пример Весны

Эквивалентная версия весной.

package com.mkyong.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.mkyong.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.mkyong.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");
		
	}

}

Файл: Spring-Quartz.xml – Объявляет задания и триггеры в файле конфигурации Spring XML bean.



	
	
	

	
	
		
	

	
		
	
	
	
		
	
	
	
	
		
		
	
	
	
		
		
	
	
	
		
		
	

	
		
			
				
				
				
			
		
	


Запустите его

package com.mkyong.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

Скачать Исходный Код

Рекомендации

  1. Использование кварца с пружиной

Оригинал: “https://mkyong.com/java/example-to-run-multiple-jobs-in-quartz/”