天天看点

quartz任务调度

1.新建一个类继承 httpServlet

   public void doGet(HttpServletRequest request,HttpServletResponse response){

doPost(request, response);

}

public void doPost(HttpServletRequest request,HttpServletResponse response){

//每隔5分钟执行一次

String reg = "0 */5 * * * ?";

//每天9点钟执行一次

String reg2 = "0 0 9 * * ?";

String reg1 = "0 0/3 * * * ?";

try { 

GetDataJobService.startGetDataTrigger("autocontrol", "autocontrol", reg);

    } catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SchedulerException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (java.text.ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

2.新建JobDetail 任务细节,Quartz执行Job时,需要新建个Job实例,但是不能直接操作Job类,所以通过JobDetail来获取Job的名称、描述信息

private static Scheduler scheduler;

public QOPScheduler()

{

_start();

}

public static final void _start()

{

if (scheduler == null)

{

try

{

scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

}

catch (SchedulerException se)

{

se.printStackTrace();

}

}

}

public static Scheduler getScheduler()

{

return scheduler;

}

public static JobDetail getJobDetail(String jobName, String groupName)

throws SchedulerException

{

return getScheduler().getJobDetail(jobName, groupName);

}

public static void refreshTrigger(String jobName, String groupName, String reg_time) throws SchedulerException,ParseException,java.text.ParseException {

Scheduler sched = QOPScheduler.getScheduler();

JobDetail job = QOPScheduler.getJobDetail(jobName, groupName);

        Trigger trigger = sched.getTrigger(jobName,groupName);

        if  (trigger !=  null ) {

            CronTrigger ct = (CronTrigger) trigger;

            // 移除当前进程的Job   

            sched.deleteJob(jobName,groupName);

            // 修改Trigger   

            ct.setCronExpression(reg_time);  

            logger.debug("======重新配置调度任务: "  + ct.getJobName());

            // 重新调度jobDetail  

            sched.scheduleJob(job, ct);

        }

}

public static void scheduleCronJob(String jobName, String group, Class jobClass, String expression, Map map)

throws SchedulerException,  java.text.ParseException

{

JobDetail jobDetail = new JobDetail(jobName, group, jobClass);

CronTrigger trigger;

if (group == null || group.trim().equals(""))

trigger = new CronTrigger(jobName, "meta.job");

else

trigger = new CronTrigger(jobName, group);

trigger.setCronExpression(expression);

if (map != null && map.size() > 0)

jobDetail.getJobDataMap().putAll(map);

getScheduler().scheduleJob(jobDetail, trigger);

}

public static void startGetDataTrigger(String jobName, String groupName,

String reg) throws SchedulerException, ParseException,

java.text.ParseException {

JobDetail job = QOPScheduler.getJobDetail(jobName, groupName); 

if(job != null){

refreshTrigger(jobName, groupName, reg);

if (job == null) { Map m = new HashMap(); 

QOPScheduler.scheduleCronJob(jobName, groupName, GetDataJob.class,

reg, m);

}

}

public static void checkTrigger() {

if( ! "true".equalsIgnoreCase(ConfigUtil.JOB_TRIGGER_CHK) ){

return ;

}

try{

Scheduler sched = QOPScheduler.getScheduler();

int getDataJob = sched.getTriggerState("autocontrol1", "autocontrol1");

int metadataSync = sched.getTriggerState("metadataSync2", "metadataSync2");

int userSync = sched.getTriggerState("huaweiusersync", "huaweiusersync");

logger.debug("======检查调度状态=======");

if(Trigger.STATE_ERROR == getDataJob ){

logger.debug("======重新恢复调度:" + getDataJob);

sched.resumeTrigger("autocontrol1", "autocontrol1");

}

if(Trigger.STATE_ERROR == metadataSync ){

logger.debug("======重新恢复调度:" + metadataSync);

sched.resumeTrigger("metadataSync2", "metadataSync2");

}

if(Trigger.STATE_ERROR == userSync ){

logger.debug("======重新恢复调度:" + userSync);

sched.resumeTrigger("huaweiusersync", "huaweiusersync");

}

}catch(SchedulerException e){

logger.error("调度触发器检查异常:",e);

}

}

public class GetDataJob implements Job{

// @Autowired

// private PlazaService plazaService;

Logger logger = Logger.getLogger(GetDataJob.class);

@Override

public void execute(JobExecutionContext jc) throws JobExecutionException {

GetDataJobService.checkTrigger();//by huxy 

//PlazaService plazaService = (PlazaService)ServletUtil.getBean("plazaServiceImpl");

StandardTableService standardTableService = null;

standardTableService = (StandardTableService)SpringContextUtil.getBean("standardTableService");

StandardColumnService standardColumnService = (StandardColumnService)SpringContextUtil.getBean("standardColumnService");

ColumnService columnService = (ColumnService) SpringContextUtil.getBean("columnServiceImpl");

CataService cataService = (CataService)SpringContextUtil.getBean("cataServiceImpl");

logger.info("==============执行 GetDataJob 任务==================");

List<StandardTablePO> tableList = standardTableService.getAllTables();

for(StandardTablePO tableEntity : tableList){

List<StandardColnumPO> colList = columnService.getList(tableEntity.getTableNum());

cataService.delete(tableEntity.getTableNum());

for(StandardColnumPO colEntity : colList){

if("1".equals(colEntity.getIsCata())){

List<Map> list = standardColumnService.getColValue(tableEntity.getTableEnName(), colEntity.getColnumEnName());

for(Map map : list){

if(map.get(colEntity.getColnumEnName().toUpperCase()) == null){

System.out.println("空值不列入统计范围");

}else{

CataPO entity = new CataPO();

entity.setColId(colEntity.getColnumId());

//entity.setColNum(colEntity.get);

entity.setTableId(tableEntity.getTableId());

entity.setTableNum(tableEntity.getTableNum());

entity.setValue(map.get(colEntity.getColnumEnName().toUpperCase()).toString());

cataService.save(entity);

}

}

}

}

}

}

}

继续阅读