JAVA定时器每日删除ES过期索引
背景:在Linux服务器上,设置一个后台进程,每天0点10分自动删除ELK中Elasticsearch中超过三个月的旧索引,使用Quartz实现。
废话少说,直接上代码!!!
目录:
1、源码:
2、调用方法:
1、源码:
(1)QuartzCli.java
package com.remoa.quartzCli;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
/**
* This class is used to use Quartz
* @author remoa
* @since 2017.09.18
*/
public class QuartzCli{
//日志记录
private static final Log LOG = LogFactory.getLog(QuartzCli.class);
//后台流程每天0点10分开始跑
//public static final String INDEX_DELETE_CRON = "0 10 0 * * ?";
//后台流程每10秒开始跑
private static final String INDEX_DELETE_CRON = "*/10 * * * * ?";
//定义Job名字
private static final String JOB_NAME = "Index_quartz_cli";
/**
* 启动定时任务
*/
public void start(){
System.out.println("Start quartz mode: " + INDEX_DELETE_CRON);
LOG.info("Start quartz mode: " + INDEX_DELETE_CRON);
//SchedulerFactory:提供用于获取调度程序实例的客户端可用句柄的机制
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
//Scheduler:调度程序,接口,代表一个独立运行容器,调度程序维护JobDetail和触发器的注册表,一旦注册,调度程序负责执行作业。
Scheduler scheduler = null;
try {
//设置调度程序的实现类
scheduler = schedulerFactory.getScheduler();
} catch (SchedulerException e) {
LOG.error(e.getMessage(), e);
}
//实例化JobDetail调度任务,JobDetail存放作业的状态,JobDetail对象储存作业的侦听器、群组、数据映射、描述以及作业的其它属性。
//newJob方法设置需要执行的Job任务类名
JobBuilder jobBuilder = JobBuilder.newJob(MyJob.class);
//withIdentity设置JobDetail的name和group
jobBuilder.withIdentity(JOB_NAME, "remoaGroup");
//JobDetail是一个接口,必须通过JobBuilder的build方法实例化JobDetail
JobDetail job = jobBuilder.build();
//实例化Trigger触发器,实现对作业的调度。
CronTrigger cronTrigger = (CronTrigger)TriggerBuilder.newTrigger()
.withIdentity("Cron_Trigger" + System.currentTimeMillis(), "remoaGroup")
.withSchedule(CronScheduleBuilder.cronSchedule(INDEX_DELETE_CRON))
.startNow()
.build();
//JobDataMap是java map的具体实现,并添加了一些便利的方法用于存储与读取原生类型数据,可以为Job实例提供属性/配置
job.getJobDataMap()
.put("executor", this);
try {
//为调度程序设置job和trigger
scheduler.scheduleJob(job, cronTrigger);
//调用start开始调度
scheduler.start();
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
}
public static void main(String[] args) {
QuartzCli quartzCli = new QuartzCli();
quartzCli.start();
}
}
(2)MyJob.java