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));
}
}