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表达式,参考我上一篇转载的文章。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 和 Quartz 是两个不同的框架,可以结合使用来实现定时任务。 首先,你需要配置 Quartz 的相关依赖和配置文件。你可以在 Spring配置文件中添加以下内容: ```xml <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="yourTaskBean" /> <property name="targetMethod" value="yourTaskMethod" /> </bean> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="jobDetail" /> <property name="cronExpression" value="0 0 0 * * ?" /> <!-- 在每天凌晨执行任务 --> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean> ``` 上述配置中,`yourTaskBean` 是你实现的定时任务的类,`yourTaskMethod` 是该类中的定时任务方法。`cronExpression` 是定时任务的执行时间表达式,上述例子中表示在每天凌晨执行任务。 然后,在你的 Spring MVC 控制器中,你可以通过注入一个 Scheduler 对象来启动和停止定时任务: ```java @Autowired private Scheduler scheduler; @RequestMapping("/startTask") public String startTask() { try { scheduler.start(); return "定时任务已启动"; } catch (SchedulerException e) { e.printStackTrace(); return "定时任务启动失败"; } } @RequestMapping("/stopTask") public String stopTask() { try { scheduler.shutdown(); return "定时任务已停止"; } catch (SchedulerException e) { e.printStackTrace(); return "定时任务停止失败"; } } ``` 上述代码中,`startTask` 方法用于启动定时任务,`stopTask` 方法用于停止定时任务。 这样,当你访问 `/startTask` 接口时,定时任务将会启动;当你访问 `/stopTask` 接口时,定时任务将会停止。 希望以上信息能对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值