spring Quartz 使用梳理

Quartz三要素:定时器(Trigger) 任务(Job) 调度器(Scheduler)

1、在spring.xml文件中配置任务调度实现类,注入你自己需要的的业务逻辑类到该类中。 ${push.runenabled} = false

 <bean name="DataTo365" class="com.bisa.health.appserver.zj.remote.DataTo365"></bean>

      <!-- quarz推送数据 -->
      <bean id="QuartzWork" class="com.bisa.health.appserver.zj.data.quarz.DataSchedulerServiceImpl">   
                <constructor-arg ref="DataTo365"/> 
                <constructor-arg name="runenabled" value="${push.runenabled}" />
      </bean>  

2、(1) 在任务调度类中声明工作任务的Job
(2)定义触发器Trigger,并将触发器与工作任务绑定
(3)定义调度器,并将Trigger注册到Scheduler

接口:

public interface IDataSchedulerService {

       boolean isEnabled();

       void enableSessionValidation();

       void disableSessionValidation();
}

调度实现类:

import java.text.ParseException;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.bisa.health.appserver.zj.remote.DataTo365;

public class DataSchedulerServiceImpl implements IDataSchedulerService{

     private static final String JOB_NAME = "DataPushJob";
     private Scheduler scheduler;
     private boolean enabled = false;
     private boolean schedulerImplicitlyCreated = false;

    @Autowired
    private DataTo365 dataPushService;

    public DataSchedulerServiceImpl(){

    }

    public DataSchedulerServiceImpl(boolean runenabled,
            DataTo365 dataPushService) {
        super();
        this.dataPushService = dataPushService;
        if(runenabled==true&&enabled==false){
            enableSessionValidation();
        }
    }

    protected Scheduler getScheduler() throws SchedulerException {
        if (scheduler == null) {
            scheduler = StdSchedulerFactory.getDefaultScheduler();
            schedulerImplicitlyCreated = true;
        }
        return scheduler;
    }

    public void setScheduler(Scheduler scheduler) {
        this.scheduler = scheduler;
    }


    @Override
    public boolean isEnabled() {
        // TODO Auto-generated method stub
        return this.enabled;
    }

    @Override
    public void enableSessionValidation() {
        try {
            //Quarz三要素:定时器 任务 调度器
            //是为了获得调度的时间或时间间隔,可以查询cron在线编辑自己需要的时间
            Trigger trigger=new CronTrigger("trigger_1", "tGroup1","0 */1 * * * ?");
            //将job注入jobdetail,是为了获取他要执行任务(业务逻辑)
            JobDetail detail = new JobDetail(JOB_NAME, Scheduler.DEFAULT_GROUP, DataPushJob.class);
            //obDataMap是jobdetail的一个方法,主要是为了获取job里面设置参数,trigger的里面也可以获取
            detail.getJobDataMap().put(DataPushJob.DATA_PUSH_MANAGER_KEY, dataPushService);
            Scheduler scheduler = getScheduler();

            scheduler.scheduleJob(detail, trigger);
            if (schedulerImplicitlyCreated) {
                scheduler.start();

            }
            this.enabled = true;

        } catch (SchedulerException e) {
           e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void disableSessionValidation() {
          Scheduler scheduler;
            try {
                scheduler = getScheduler();
                if (scheduler == null) {

                    return;
                }
            } catch (SchedulerException e) {
                return;
            }

            try {
                scheduler.unscheduleJob(JOB_NAME, Scheduler.DEFAULT_GROUP);

            } catch (SchedulerException e) {

            }

            this.enabled = false;

            if (schedulerImplicitlyCreated) {
                try {
                    scheduler.shutdown();
                } catch (SchedulerException e) {            
                        System.out.println("Unable to cleanly shutdown implicitly created Quartz Scheduler instance."+ e.getMessage());
                } finally {
                    setScheduler(null);
                    schedulerImplicitlyCreated = false;
                }
            }
    }

}

任务类:在这写需要去执行的业务

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

import com.bisa.health.appserver.zj.remote.DataTo365;

public class DataPushJob implements Job{

    public static final String DATA_PUSH_MANAGER_KEY = "dataPushManager";
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobDataMap jobDataMap = context.getMergedJobDataMap();
        DataTo365 dataTo365 = (DataTo365) jobDataMap.get(DATA_PUSH_MANAGER_KEY);
        System.out.println(".............DataTo365" + (dataTo365));


    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值