Spring Boot integra Quarz para realizar la activación automática de tareas programadas

prefacio

Use Quartz para implementar una tarea de tiempo configurable y escriba la tarea de tiempo Quartz en la base de datos. Ahora quiero activar automáticamente la tarea programada cuando se inicia el proyecto, el siguiente es el método de implementación:

Autoinicio del proyecto

Spring Boot usa ApplicationRunner para implementar operaciones comerciales directamente después del inicio del proyecto.

Este blog describe en detalle la implementación de operaciones comerciales automáticas después del inicio del proyecto. Solo necesitamos agregar la interfaz de método llamada por la tarea programada en el método de ejecución.

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

Inicio de tareas programadas

Obtener información de tareas programadas de la base de datos

	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 y disparador de tareas cronometradas

	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("执行任务发生异常");
        }
    }

Supongo que te gusta

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