/**
* Copyright 2016 benjobs
* <p>
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.opencron.server.job;
import org.opencron.server.service.*;
import org.opencron.common.job.Opencron;
import org.opencron.common.utils.CommonUtils;
import org.opencron.server.domain.Record;
import org.opencron.server.vo.JobVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class OpencronTask implements InitializingBean {
private final Logger logger = LoggerFactory.getLogger(OpencronTask.class);
@Autowired
private AgentService agentService;
@Autowired
private ExecuteService executeService;
@Autowired
private RecordService recordService;
@Autowired
private JobService jobService;
@Autowired
private ConfigService configService;
@Autowired
private SchedulerService schedulerService;
@Autowired
private OpencronMonitor opencronMonitor;
@Override
public void afterPropertiesSet() throws Exception {
configService.initDataBase();
//检测所有的agent...
clearCache();
//通知所有的agent,启动心跳检测...
opencronMonitor.start();
schedulerService.initQuartz(executeService);
schedulerService.initCrontab();
}
//@Scheduled(cron = "0/5 * * * * ?")
public void reExecuteJob() {
logger.info("[opencron] reExecuteIob running...");
final List<Record> records = recordService.getReExecuteRecord();
if (CommonUtils.notEmpty(records)) {
new Thread(new Runnable() {
@Override
public void run() {
for (final Record record : records) {
final JobVo jobVo = jobService.getJobVoById(record.getJobId());
logger.info("[opencron] reexecutejob:jobName:{},jobId:{},recordId:{}", jobVo.getJobName(), jobVo.getJobId(), record.getRecordId());
final Thread thread = new Thread(new Runnable() {
public void run() {
jobVo.setAgent(agentService.getAgent(jobVo.getAgentId()));
executeService.reExecuteJob(record, jobVo, Opencron.JobType.SINGLETON);
}
});
thread.start();
}
}
}).start();
}
}
private void clearCache() {
OpencronTools.CACHE.remove(OpencronTools.CACHED_AGENT_ID);
OpencronTools.CACHE.remove(OpencronTools.CACHED_JOB_ID);
}
}