Tag Archives: quartz

Springboot integrates quartz timed task trigger_ State error resolution

Background

For Java projects, quartz is used to schedule tasks, and then a strange problem occurs. When adding job scheduling, it is found that the status of write scheduled tasks directly becomes error, or it becomes error after running once or twice. At that time, I was still wondering how this could happen. It is OK to check the log and send modern codes without errors. Manual execution is OK. Then I found that two services are running the same database

Quartz timing task is configured in the database

Then it is found that a server has a very old version of code, so that the corresponding job class cannot be found at runtime, and then the state directly changes to error. Just turn off the older services. Or the two service codes are consistent

terms of settlement

1. Check which service processes are scheduled in the current database

SQL command:   show   processlist;

It will display the of all processes accessing the database you specify

  Then find the corresponding server, update the code or stop one of the services

Springboot integrates quartz timing tasks

SpringBoot integrated Quartz timing task

1, create project


2. Create task class

package com.quartzjob.job.sysJob;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 具体任务
 */
public class HelloJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");
        String dateString = simpleDateFormat.format(date);
        System.out.println(dateString);
    }
}

3, configure trigger and task scheduler

package com.quartzjob.job.config;

import com.quartzjob.job.sysJob.HelloJob;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;

/**
 * 配置触发器和任务调度器
 */
@Configuration
public class QuartzConfig {
    /**
     * 创建job对象
     * @return
     */
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean(){
        JobDetailFactoryBean factoryBean =  new JobDetailFactoryBean();
        //具体任务类
        factoryBean.setJobClass(HelloJob.class);
        return factoryBean;
    }

    /**
     * 创建tigger对象
     * @param jobDetailFactoryBean
     * @return
     */
    @Bean
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
        SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
        //关联jobDetailFactoryBean
        factoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        //执行周期
        factoryBean.setRepeatInterval(2000);
        //重复次数
        factoryBean.setRepeatCount(5);
        return factoryBean;
    }

    /**
     * 创建Scheduler
     * @param simpleTriggerFactoryBean
     * @return
     */
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){
        SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
        //关联tigger
        factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
        return factoryBean;
    }
}


4. Turn on the timed task

package com.quartzjob.job;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class JobApplication {

    public static void main(String[] args) {
        SpringApplication.run(JobApplication.class, args);
    }

}