O Spring Boot integra o Quarz para realizar o acionamento automático de tarefas agendadas

prefácio

Use o Quartz para implementar uma tarefa de temporização configurável e grave a tarefa de temporização Quartz no banco de dados. Agora eu quero acionar automaticamente a tarefa agendada assim que o projeto for iniciado, o seguinte é o método de implementação:

Inicialização automática do projeto

O Spring Boot usa o ApplicationRunner para implementar operações de negócios diretamente após a inicialização do projeto.

Este blog descreve em detalhes a implementação de operações de negócios automáticas após a inicialização do projeto. Precisamos apenas adicionar a interface do método chamada pela tarefa agendada no método run.

		log.info("启动定时任务");
        quartzService.startQuartz();

Início de tarefa agendada

Obtenha informações de tarefas agendadas do banco de dados

	public void startQuartz(){
    
    
        String jobGroup ="MySyncTask";
        String jobName ="定时人数";
        try {
    
    
            //先已有的任务
            List<Quartz> list = quartzMapper.findList(jobGroup, jobName);
            if(list != null && list.size()>0){
    
    
                log.info("项目启动后,启动定时任务:{}",list.get(0).getJobName());
                doQuatrz(list.get(0));
            }
        }catch (Exception e){
    
    
            e.printStackTrace();
            log.error("项目启动后,启动定时任务发生异常:{}",e.getMessage());
            API.e("项目启动后,启动定时任务发生异常");
        }
    }

Consulta e gatilho de tarefa cronometrada

	private void doQuatrz(Quartz quartz){
    
    
        try {
    
    
            //直接启动
            Class cls = Class.forName(quartz.getJobClassName()) ;
            cls.newInstance();
            //构建job信息
            JobDetail job = JobBuilder.newJob(cls).withIdentity(quartz.getJobName(),quartz.getJobGroup()).withDescription(quartz.getDescription()).build();
            // 触发时间点
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartz.getCronExpression());
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger_"+quartz.getJobName(), quartz.getJobGroup()).withDescription(quartz.getDescription()).startNow().withSchedule(cronScheduleBuilder).build();
            //交由Scheduler安排触发
            scheduler.scheduleJob(job, trigger);
            quartz.setJobStatus(JobStatus.RUN.getStatus());
            quartzRepository.save(quartz);
        }catch (Exception e){
    
    
            e.printStackTrace();
            log.error("执行任务发生异常:{}",e.getMessage());
            API.e("执行任务发生异常");
        }
    }

Acho que você gosta

Origin blog.csdn.net/qq_28545605/article/details/125726572
Recomendado
Clasificación