随着项目的年限增长,需要定时任务的地方或需求越来越多,怎么管理好自己的定时任务,实现一个简单的定时任务管理显得尤为重要,仅已此篇给需要的码农作为参考,希望对您有些许帮助。
可以使用Java中的Quartz框架来实现定时任务管理,同时使用数据库来配置时间。下面是简单的实现步骤:
1. 在pom.xml中添加Quartz依赖:
xml
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
2. 在数据库中创建一张表,用于存放任务的调度信息。可以根据Quartz提供的默认表结构创建或自行定义:
sql
CREATE TABLE `sys_schedule_job` (
`job_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '任务ID',
`job_name` varchar(64) NOT NULL COMMENT '任务名称',
`job_group` varchar(64) NOT NULL COMMENT '任务分组',
`cron_expression` varchar(64) NOT NULL COMMENT 'cron表达式',
`job_status` varchar(1) NOT NULL COMMENT '任务状态(0:停用,1:正常)',
`class_name` varchar(255) NOT NULL COMMENT '任务执行类',
`method_name` varchar(255) NOT NULL COMMENT '任务执行方法',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`job_id`),
UNIQUE KEY `uk_job_name` (`job_name`,`job_group`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='定时任务'
3. 创建Job类,实现具体的任务逻辑。如:
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// 执行具体的任务逻辑
System.out.println("myJob is running...");
}
}
4. 创建JobDetail和Trigger,设置调度时间和相关参数。如:
// 创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity(jobName, jobGroup)
.build();
// 创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobName, jobGroup)
.startAt(startDate)
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();
// 调度任务
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
5. 配置任务调度信息到数据库中。如:
List<ScheduleJob> jobList = scheduleJobMapper.getScheduleJobList();
// 遍历任务列表,配置任务调度信息
for (ScheduleJob job : jobList) {
String jobName = job.getJobName();
String jobGroup = job.getJobGroup();
String cronExpression = job.getCronExpression();
// 创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
.withIdentity(jobName, jobGroup)
.build();
// 创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity(jobName, jobGroup)
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.build();
// 调度任务
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
}
以上代码仅提供了简单的实现思路,详细的实现还需视具体场景而定。同时,需要注意的是,Quartz的调度器是单例模式,需要在应用程序启动时初始化,并在应用程序关闭时销毁。也推荐大家使用另外一款更好管理项目定时任务的任务调度平台(xxl-job一个分布式的[任务调度]平台,其核心设计目标是:学习简单、开发迅速、轻量级、易扩展,现在已经开放源代码并接入多家公司的线上产品线,开箱即用)后面也会整理下 供大家参考 谢谢您的阅读,望你早日实现金钱自由!