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