spring 手动任务调度

场景

当门户网站上一条信息需要在5月1日的下午2点更新到网站上,我们就要以在前台页面上对某一条信息手动设置它的发布日期,spring 会将这条信息添加调度任务中,到了发布时间spring 会调用设置好的静态化业务逻辑。


代码:

向spring 任务列表添加任务

 public void schedulerJob(String jobId,String jobName,Data time,Map<String,Object> params)
 {         
          final JobDetailBean jobDetail = new JobDetailBean();
	  //在调度任务中全局唯一
          jobDetail.setName(jobId);
          jobDetail.setGroup(jobName);
	  //Job.class 处理业务逻辑
          jobDetail.setJobClass(Job.class);
          final JobDataMap dataMap = new JobDataMap();
	
	  //向调度任务传入业务参数
          dataMap.put("params", params);
          jobDetail.setJobDataMap(dataMap);

          final SchedulerFactoryBean schedulerFactory = SpringContextUtil
                  .getBean(SchedulerFactoryBean.class);
          final Scheduler scheduler = schedulerFactory.getScheduler();

          final SimpleTrigger trigger = new SimpleTrigger();
          //设置调度任务的开始时间
          trigger.setStartTime(time);
          trigger.setName(jobId);
          trigger.setGroup(jobName);
          scheduler.scheduleJob(jobDetail, trigger);

          scheduler.start();
      } catch (final Exception e) {
          e.printStackTrace();
          throw new CoreRuntimeException("调度任务失败!");

      }
}


开始调度

package com.bankcomm.gweb.gcms.biz.d2s.job.executor.impl;

import java.util.Map;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;
import com.bankcomm.gweb.biz.util.SpringContextUtil;
import com.bankcomm.gweb.gcms.biz.d2s.job.executor.ID2sJobExecutorBiz;
import com.bankcomm.gweb.gcms.condition.d2s.job.item.CmsD2sItemCondition;
/**
 * @Title: Job.java
 * @Package: com.bankcomm.gweb.gcms.biz.d2s.job.executor.impl
 * @Description:
 * @author: zhaozb.sdc@sdc.com
 * @date: 2014-3-5 @ @version: V1.0
 */
@Component
public class Job extends QuartzJobBean {
    private final Logger log = LoggerFactory.getLogger(this.getClass());
    private ID2sJobExecutorBiz jobExecutorBiz;
    @Override
    protected void executeInternal(final JobExecutionContext jobexecutioncontext)
            throws JobExecutionException {
        log.debug("--------------start scheduler job--------------");
        final Map dataMap = jobexecutioncontext.getJobDetail().getJobDataMap();
        final Map<String,Object> parmas = (Map<String,Object>) dataMap
                .get("params");
		//获取业务逻辑Bean
        jobExecutorBiz = (ID2sJobExecutorBiz) SpringContextUtil.getBean("folderExecutorBizImpl");
        //执行业务逻辑
		jobExecutorBiz.execute(parmas);
        log.debug("--------------end scheduler job--------------");
    }

}

处理业务

 @Component("folderExecutorBizImpl")
public class FolderExecutorBizImpl implements ID2sJobExecutorBiz {

  

    @Override
    public void execute(Map<String,Object> params) {
		
		//业务逻辑
                                                                                                                                    } 
 }



当服务器因停电、宕机、重器导致任务项丢失,只要将调度任务的信息存到数据库并设个执行状态,在程序中配置一个定时器,这个定时器在被加载后就去数据库里查询一下没有调度过任务并将这些什么添加到任务务列表中


spring quartz 配置

	<bean id="jobContextExecutorBizImpl" class="com.bankcomm.gweb.gcms.biz.d2s.job.executor.impl.JobContextExecutorBizImpl"/>
	
	<bean id="jobContextJobDetailFactory" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="jobContextExecutorBizImpl"/>
		</property>
		<property name="targetMethod">
			<value>execute</value>
		</property>
		<property name="concurrent" value="false" />
	</bean>	
	
	<bean id="jobContextCronTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="jobContextJobDetailFactory"/>
		</property>
		<!--载后4秒后执行 JobContextExecutorBizImpl 类的execute方法 -->
		<property name="startDelay">
			<value>4000</value>
		</property>
		<!--多少秒执行一次-->
		<property name="repeatInterval" value="1000" />
		<!--总共要执行几次-->
		<property name="repeatCount" value="0" />
	</bean>	
	
	
	
	<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="jobContextCronTrigger"/>
			</list>
		</property>
	</bean>	





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值