Quartz定时任务,Quartz Spring定时任务,spring多个定时任务Quartz配置,示例,详解

至于Quartz到底是什么,可以看我上一篇转载的文章,或者百度。下面直接举例:

1.Spring配置Quartz

a.需要导入quartz的jar包:

   quartz-2.1.7.jar

b.【Spring配置文件ApplicationContext.xml】

	<!-- 启动触发器的配置开始 -->
	<bean name="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
			  <ref bean="myJobTrigger_1" />
			  <ref bean="myJobTrigger_2" />
			</list>
		</property>
	</bean>
	
	<!-- quartz-2.x的配置 -->
	<bean id="myJobTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail">
		  <ref bean="myJobDetail_1" />
		</property>
		<property name="cronExpression">
		  <value>0/5 * * * * ?</value>
		</property>
	</bean>
	
	<!-- job的配置开始 -->
	<bean id="myJobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
		  <ref bean="myJob_1" />
		</property>
		<property name="targetMethod">
		  <value>work</value>
		</property>
	</bean>
	<!-- 工作的bean -->
	<bean id="myJob_1" class="com.myb.timertask.SysQuartzJob" />
	
	<!-- quartz-2.x的配置 (第二个quartz定时任务)-->
	<bean id="myJobTrigger_2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail">
		  <ref bean="myJobDetail_2" />
		</property>
		<property name="cronExpression">
		  <value>0/5 * * * * ?</value>
		</property>
	</bean>
	
	<!-- job的配置开始 -->
	<bean id="myJobDetail_2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
		  <ref bean="myJob_2" />
		</property>
		<property name="targetMethod">
		  <value>work</value>
		</property>
	</bean>
	<!-- 工作的bean -->
	<bean id="myJob_2" class="com.myb.timertask.SysQuartzJob2" />
c.【job bean对应的java】

package com.myb.timertask;

import javax.annotation.Resource;

import com.myb.service.util.MybUtilService;
import com.myb.util.DateUtil;

/**
 * 
 * <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/> 
 * <b>类名称:</b>SysQuartzJob<br/> 
 * <b>类描述:</b> Quartz定时任务示例   <br/> 
 * <b>版本:</b>V1.0<br/> 
 * <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>  
 * <b>创建时间:</b>2016年3月5日 下午10:21:22<br/>
 */
public class SysQuartzJob {
	
	@Resource(name="mybUtilService")
	private MybUtilService mybUtilService;
	
	public void work() throws Exception{
		System.out.println("第一个定时任务:"+DateUtil.getTime());
	}
}
package com.myb.timertask;

import javax.annotation.Resource;

import com.myb.service.util.MybUtilService;
import com.myb.util.DateUtil;

/**
 * 
 * <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/> 
 * <b>类名称:</b>SysQuartzJob<br/> 
 * <b>类描述:</b> Quartz定时任务示例   <br/> 
 * <b>版本:</b>V1.0<br/> 
 * <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>  
 * <b>创建时间:</b>2016年3月5日 下午10:22:01<br/>
 */
public class SysQuartzJob2 {
	
	@Resource(name="mybUtilService")
	private MybUtilService mybUtilService;
	
	public void work() throws Exception{
		System.out.println("第二个定时任务:"+DateUtil.getTime());
	}
}

2. 直接调用Quartz方法

a.创建要被定执行的任务类,实现org.quartz.Job接口,并实现这个接口的唯一一个方法execute(JobExecutionContext arg0) throws JobExecutionException

package com.myb.timertask;

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

import com.myb.util.DateUtil;

/**
 * 
 * <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/> 
 * <b>类名称:</b>SysQuartzJob<br/> 
 * <b>类描述:</b> Quartz定时任务示例   <br/> 
 * <b>版本:</b>V1.0<br/> 
 * <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>  
 * <b>创建时间:</b>2016年3月5日 下午10:29:47<br/>
 */
public class SysJob implements Job{

	@Override
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		System.out.println("SysJob,系统任务:"+DateUtil.getTime());
	}
}

b.创建任务调度,并执行

package com.myb.timertask;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.util.Date;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

import com.myb.util.DateUtil;

/**
 * 
 * <b>所属模块:</b>牧羊仒Admin.系统定时任务示例<br/> 
 * <b>类名称:</b>SysQuartzJob<br/> 
 * <b>类描述:</b> Quartz定时任务示例   <br/> 
 * <b>版本:</b>V1.0<br/> 
 * <b>创建人:</b><a href="mailto:han_huayi@163.com">牧羊仒</a><br/>  
 * <b>创建时间:</b>2016年3月5日 下午10:31:20<br/>
 */
public class TestQuartz {
	
	public static void main(String[] arsg) throws SchedulerException{
		new TestQuartz().execute();
	}
	
	public void execute() throws SchedulerException{
		//创建调度器工厂(Scheduler的引用 )
		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();
		
		//jobs可以在scheduled的sched.start()方法前被调用 
		//job 1将每隔20秒执行一次 
        JobDetail job = newJob(SysJob.class).withIdentity("job1", "group1").build(); 
        CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?")).build(); 
        Date ft = sched.scheduleJob(job, trigger); 
        System.out.println(job.getKey() + " 已被安排执行于: " + DateUtil.getTime() + ",并且以如下重复规则重复执行: " + trigger.getCronExpression()); 
		
        // job 2将每2分钟执行一次(在该分钟的第15秒) 
        job = newJob(SysJob.class).withIdentity("job2", "group1").build(); 
        trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule("0/25 * * * * ?")).build(); 
        ft = sched.scheduleJob(job, trigger); 
       System.out.println(job.getKey() + " 已被安排执行于: " + DateUtil.getTime() + ",并且以如下重复规则重复执行: "+ trigger.getCronExpression()); 
        
        // 开始执行,start()方法被调用后,计时器就开始工作,计时调度中允许放入N个Job 
        sched.start();
        
        try { 
            //主线程等待一分钟 
        	Thread.sleep(60L * 1000L); 
        } catch (Exception e) {}     
       
       //关闭定时调度,定时器不再工作 
       sched.shutdown(true); 
	}
	
}

cronExpression表达式,参考我上一篇转载的文章。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值