实现定时任务,包括修改执行策略,用quartz+Spring

来源于网络 http://www.blogjava.net/xiaodaoxiaodao/articles/103437.html 给出完整的类和配置文件,除了一般是Spring 包外,另外需要下一个包spring-context-1.15.jar包,可在http://repo1.maven.org/maven2/ 找。 下面的内容拼到一个webProject里面,发布起来就可以看到效果。 1.Action public class ScheduleInfoAction { public void reScheduleJob() throws SchedulerException, ParseException { // 运行时可通过动态注入的scheduler得到trigger CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger( "cronTrigger", Scheduler.DEFAULT_GROUP); String dbCronExpression = getCronExpressionFromDB(); String originConExpression = trigger.getCronExpression(); // 判断从DB中取得的任务时间(dbCronExpression)和现在的quartz线程中的任务时间(originConExpression)是否相等 // 如果相等,则表示用户并没有重新设定数据库中的任务时间,这种情况不需要重新rescheduleJob if(!originConExpression.equalsIgnoreCase(dbCronExpression)){ trigger.setCronExpression(dbCronExpression); //执行更新操作 scheduler.rescheduleJob("cronTrigger", Scheduler.DEFAULT_GROUP, trigger); } // 下面是具体的job内容,可自行设置 executeJobDetail(); } private String getCronExpressionFromDB(){ String sql="from ScheduleInfo scheduleInfo where 1=1 "; sql=sql+" and scheduleInfo.infoId = '"+"1" + "'"; List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql); ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0); String dbCronExpression = scheduleInfo.getCronExpression(); return dbCronExpression; } private void executeJobDetail(){ System.out.println("schedule action time:"+System.currentTimeMillis()); } private Scheduler scheduler; // 设值注入,通过setter方法传入被调用者的实例scheduler public void setScheduler(Scheduler scheduler) { this.scheduler = scheduler; } private ScheduleInfoManager scheduleInfoManager; // 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){ this.scheduleInfoManager = scheduleInfoManager; } } 2.Bean public class ScheduleInfo { String cronExpression="0/10 * * * * ?"; public void setCronExpression(String cronExpression) { this.cronExpression = cronExpression; } public String getCronExpression(){ return this.cronExpression ; } } 3.Service public class ScheduleInfoManager { long i =System.currentTimeMillis(); int j=0; List lis=new ArrayList(); ScheduleInfo s=new ScheduleInfo(); public List queryScheduleInListBySql(String sql){ if(System.currentTimeMillis()-i<30*1000 ){ }else if(j==0){ j++; s.setCronExpression("0 * * * * ?"); System.out.println("30秒到,更新参数:0 * * * * ?"); } lis.add(s); return lis; } } 4.Init public class InitializingCronTrigger extends CronTriggerBean implements Serializable { private ScheduleInfoManager scheduleInfoManager; // 设值注入,通过setter方法传入被调用者的实例scheduleInfoManager public void setScheduleInfoManager(ScheduleInfoManager scheduleInfoManager){ this.scheduleInfoManager = scheduleInfoManager; // 因为在getCronExpressionFromDB使用到了scheduleInfoManager,所以 // 必须上一行代码设置scheduleInfoManager后进行getCronExpressionFromDB String cronExpression = getCronExpressionFromDB (); // ① // 因为extendsCronTriggerBean ,此处调用父类方法初始化cronExpression try { setCronExpression (cronExpression); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // ② } private String getCronExpressionFromDB(){ String sql="from ScheduleInfo scheduleInfo where 1=1 "; sql=sql+" and scheduleInfo.infoId = '"+"1" + "'"; List scheduleList = scheduleInfoManager.queryScheduleInListBySql(sql); ScheduleInfo scheduleInfo = (ScheduleInfo)scheduleList.get(0); String dbCronExpression = scheduleInfo.getCronExpression(); System.out.println("inital:"+dbCronExpression); return dbCronExpression; } 5.applicationcontext.xml
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值