怎么根据计划周期定时生成工单, 求解答?

怎么根据计划周期定时生成工单,当计划开始根据选择的周期,如立即执行一次,每天执行一次,每月执行一次。 最好可以指定每天几点,每月几号执行


回答:

import java.util.*;

public class Main {

public static void main(String[] args) {

Timer timer = new Timer();

// 每天的特定时间(例如,每天的 14:30:00)执行任务

Calendar dailyTime = Calendar.getInstance();

dailyTime.set(Calendar.HOUR_OF_DAY, 14);

dailyTime.set(Calendar.MINUTE, 30);

dailyTime.set(Calendar.SECOND, 0);

if (dailyTime.before(Calendar.getInstance())) {

dailyTime.add(Calendar.DAY_OF_MONTH, 1);

}

timer.schedule(new MyTask(), dailyTime.getTime(), 24*60*60*1000);

// 每月的特定日期(例如,每月的第 10 天)执行任务

Calendar monthlyDate = Calendar.getInstance();

monthlyDate.set(Calendar.DAY_OF_MONTH, 10);

monthlyDate.set(Calendar.HOUR_OF_DAY, 14);

monthlyDate.set(Calendar.MINUTE, 30);

monthlyDate.set(Calendar.SECOND, 0);

if (monthlyDate.before(Calendar.getInstance())) {

monthlyDate.add(Calendar.MONTH, 1);

}

timer.schedule(new MyTask(), monthlyDate.getTime(), 30*24*60*60*1000);

}

static class MyTask extends TimerTask {

public void run() {

// 这里写你的任务

System.out.println("Task executed.");

}

}

}


回答:

直接上定时任务框架:Quartz、xxl-job、elastic-job

Quartz
优点:支持集群部署
缺点:没有自带的管理界面;调度逻辑和执行任务耦合在一起;维护需要重启服务
总结:针对目前项目情况,利弊相同

xxl-job
优点:支持集群部署;提供运维界面维护成本小;自带错误预警;相对elastic-job来说不需要额外的组件(zookeeper);支持调度策略;支持分片; 故障转移 ;更适合分布式
缺点:相对Quartz来说需要多部署调度中心
总结:针对目前项目情况,利大于弊

elastic-job
优点:支持集群部署;维护成本小
缺点:elastic-job需要zookeeper,zookeeper集群高可用至少需要三台服务器
总结:针对目前项目情况,弊大于利


回答:

xxl-job这个开源项目能满足你的需求https://www.xuxueli.com/xxl-job/#google_vignette


回答:

首先,需要创建一个Job类,这个类定义了要执行的任务

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class MyJob implements Job {

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

System.out.println("执行任务!");

}

}

接下来,需要创建一个Scheduler来调度任务:

import org.quartz.*;

import org.quartz.impl.StdSchedulerFactory;

import java.time.*;

public class MyScheduler {

public static void main(String[] args) {

try {

// 创建调度器

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

scheduler.start();

// 定义任务

JobDetail job = JobBuilder.newJob(MyJob.class)

.withIdentity("myJob", "group1")

.build();

// 定义触发器

// 立即执行,并每24小时执行一次

Trigger trigger = TriggerBuilder.newTrigger()

.withIdentity("myTrigger", "group1")

.startNow()

.withSchedule(SimpleScheduleBuilder.simpleSchedule()

.withIntervalInHours(24)

.repeatForever())

.build();

// 定义特定时间触发器

LocalTime time = LocalTime.of(15, 0); // 每天15点执行

ZonedDateTime zonedDateTime = LocalDateTime.of(LocalDate.now(), time).atZone(ZoneId.systemDefault());

Date startAtDate = Date.from(zonedDateTime.toInstant());

Trigger triggerAtTime = TriggerBuilder.newTrigger()

.withIdentity("myTriggerAtTime", "group1")

.startAt(startAtDate)

.withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(time.getHour(), time.getMinute()))

.build();

// 将任务与触发器添加到调度器中

scheduler.scheduleJob(job, trigger);

scheduler.scheduleJob(job, triggerAtTime);

// scheduler 关闭时,jobs 将自动从数据库中删除

scheduler.shutdown(true);

} catch (SchedulerException se) {

se.printStackTrace();

}

}

}


回答:

ruoyi 使用的是 quartz。
保存计划的时候,根据周期更新定时任务的Cron 表达式,参数为工单id,选择立即执行。

以上是 怎么根据计划周期定时生成工单, 求解答? 的全部内容, 来源链接: utcz.com/p/945261.html

回到顶部