quartz 立即执行+定时+防止并发+监听Job是否运行状态

这文章没有新手教程,只有个人一些笔记,新手请下载附件教程:

SimpleRun:

package cn.wa8.qweb.extract.quartz;


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.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.StdScheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

import cn.wa8.qweb.extract.action.Extract2DB;
public class SimpleRun {

	private static Logger log = LoggerFactory.getLogger(SimpleRun.class);

	public void run() throws Exception {
		SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
    	Scheduler sched = schedFact.getScheduler();
    	JobDetail jobDetail = new JobDetail("myJob",null,SimpleJob.class);
    	SimpleTrigger trigger = new SimpleTrigger("myTrigger",
    			null,
    			new Date(),
    			null,
    			SimpleTrigger.REPEAT_INDEFINITELY,
    			30L * 1000L);
    	
    	sched.scheduleJob(jobDetail, trigger);
    	//sched.addJobListener(new MyTriggerListener());
    	SimpleJob.preDate = new Date();
    	sched.start();
    	System.out.println("starting");
 /**
  * 
		state的值代表该任务触发器的状态:
		STATE_BLOCKED 	4 // 运行
		STATE_COMPLETE 	2  //完成那一刻,不过一般不用这个判断Job状态
		STATE_ERROR 	3  // 错误
		STATE_NONE 	-1		//未知
		STATE_NORMAL 	0   //正常无任务,用这个判断Job是否在运行
		STATE_PAUSED 	1	//暂停状态
 */
    while (true){
    	if(4 == sched.getTriggerState("myTrigger", null)){
    		System.out.println("running");
    	}else if(0 == sched.getTriggerState("myTrigger", null)){
    		System.out.println("ending");
    	}else {
    		System.out.println("error state:"+sched.getTriggerState("myTrigger", null));
    	}
    	try {
			Thread.sleep(5*1000);
		} catch (Exception e) {
			// TODO: handle exception
		}
    }
}

	public static void main(String[] args)  {
		
		SimpleRun simpleRun = new SimpleRun();
		
		try {
			simpleRun.run();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Simple Job:


import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.wa8.qweb.extract.action.Extract2DB;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;
/*Extract2DB extract2db = new Extract2DB();
	extract2db.CommonBaseExtract();*/

public class SimpleJob  implements StatefulJob{
	public static Date preDate ;
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		System.out.println("into Job");
		Date currentDate = new Date();
		Long s = (currentDate.getTime()-preDate.getTime())/1000;
		try {
			Thread.sleep(10*1000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println(s);
		System.out.println("leave Job:"+Thread.currentThread().toString());
		preDate =currentDate;
	}

}






  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用Spring Quartz实现定时任务时,如果需要修改定时时间而不重启服务,可以考虑以下几种方式: 1. 使用Quartz的动态定时任务更新功能: Quartz提供了动态修改定时任务的功能,可以通过更新Cron表达式来实现修改定时时间。首先,在配置文件中设置定时任务的Cron表达式为一个变量,然后在代码中通过调用Quartz的API读取配置文件的变量,并更新定时任务的Cron表达式。通过这种方式,不需要重启服务即可修改定时时间。 2. 使用数据库表保存定时任务配置参数: 可以将定时任务的配置参数,如定时时间、执行类等保存在数据库表中。然后在代码中通过查询数据库表的方式动态获取定时任务的配置参数。当需要修改定时时间时,只需更新数据库表中的相应字段,代码会动态读取到新的定时时间并生效,而不需要重启服务。 3. 使用Spring的动态Bean注册功能: 在项目启动时,通过编程的方式动态注册定时任务的Bean。将定时任务的配置属性作为参数传入Bean,当需要修改定时时间时,通过修改Bean的相关属性值来实现。Spring会自动重新加载Bean的定义,并根据新的配置参数重新创建定时任务对象,从而实现修改定时时间而不重启服务。 综上所述,使用Quartz的动态定时任务更新功能、数据库表保存定时任务配置参数或者Spring的动态Bean注册功能,都可以实现在不重启服务的情况下修改定时时间。根据实际项目需求和技术架构选择合适的方式即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值