杏花怎酿酒 2022-08-10 13:27 采纳率: 55%
浏览 96
已结题

Quartz 框架接收 cron表达式后,没有按 cron表达式的任务时间执行而是 每秒执行任务

Quartz 框架接收 cron表达式后,没有按 cron表达式的任务时间执行而是 每秒执行任务
如何改修改

controller

    @PostMapping("startBackup")
    public ResponseData start(@RequestParam("somethingToUse") String somethingToUse,
                              @RequestParam("cron")String cron
                        ){
        System.out.println("=================开始执行=================");
        try{
            jobService.startOrResumeJobBackup(somethingToUse,cron);
        } catch (SchedulerException e) {
            e.printStackTrace();
            return new ErrorResponseData(403,"失败");
        }
        return new SuccessResponseData(200, "成功",true);
    }

job

public class JobBackup extends QuartzJobBean {

    private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) {

        Date now = new Date();
        String currentData = sdf.format(now);
        System.out.println("执行备份脚本定时任务"+currentData);
    }
    
}

@Service
public class JobService {

    @Autowired
    Scheduler scheduler;

    static TriggerKey task1 = new TriggerKey("task1");

    public void startOrResumeJobBackup(String somethingToUse,String cron) throws SchedulerException {
        if (scheduler.getTriggerState(task1).toString() == "PAUSED") {
            scheduler.resumeTrigger(task1);
        } else {

            JobDetail jobDetail = JobBuilder.newJob(JobBackup.class)
                    .usingJobData("somethingToUse",somethingToUse)
                    .build();
            Trigger trigger= TriggerBuilder.newTrigger()
                    .withIdentity(task1)
                    .startNow()
                    .withSchedule(CronScheduleBuilder.cronSchedule(cron))
                    .build();
            scheduler.scheduleJob(jobDetail,trigger);
        }
    }


    public void pauseJobBackup() throws SchedulerException{
        scheduler.pauseTrigger(task1);
    }
}

传入参数

img

传入所有cron都是按秒执行

  • 写回答

3条回答 默认 最新

  • sinJack 2022-08-10 13:45
    关注

    写个测试类,单独执行看看。

    public class QuartzTest {
     
     
        public static void main(String[] args) throws SchedulerException{
            //1.调度器(Scheduler)
            SchedulerFactory schedulerfactory = new StdSchedulerFactory();
            //拿到调度器,调度器只需要一个即可,可以调度多个任务
            Scheduler scheduler = schedulerfactory.getScheduler();
            //2.Job实例(JobDetil)
            JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                    .withIdentity("job", "default") //name:任务的名称,group:分组名
                    .build();
            //3.触发器(Trigger)
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger", "default") //name:触发器名称,group:分组名
                    .startNow() //马上执行一次
                    .withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))//使用Cron触发器
                    .build();
            //4.让Job和触发器关联
            scheduler.scheduleJob(jobDetail,trigger);
            scheduler.start();
        }
     
     
        public static class MyJob implements Job {
     
            @Override
            public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
                //打印当前时间
                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String date = dateFormat.format(new Date());
                System.out.println(date);
            }
        }
    }
    
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月11日
  • 创建了问题 8月10日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表