天天看點

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

}

}

}

}

}

}

}

繼續閱讀