- Quart1(在main方法中)
- Quartz2(没有service)
- Quart3(加入service类)
Quart1(在main方法中)
main类
import org.quartz.*;
import org.quartz.impl.StdScheduler;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
public class QuartzMain {
public static void main(String[] args) throws SchedulerException {
JobDetail jobDetail= JobBuilder.newJob(QuartzDemo02.class).build();
Trigger trigger= TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.repeatSecondlyForTotalCount(3,2)).build();
Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(jobDetail,trigger);
scheduler.start();
}
}
QuartDemo02
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class QuartzDemo02 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("Demo02---->"+new Date());
}
}
Quartz2(没有service)
config类
import org.quartz.*;
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
@Bean
public JobDetailFactoryBean getJob(){
JobDetailFactoryBean job=new JobDetailFactoryBean();
job.setJobClass(QuartzDemo01.class);
return job;
}
//Trigger
@Bean
public SimpleTriggerFactoryBean triggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
SimpleTriggerFactoryBean trigger=new SimpleTriggerFactoryBean();
trigger.setJobDetail(jobDetailFactoryBean.getObject());
trigger.setRepeatInterval(2000);
trigger.setRepeatCount(5);
return trigger;
}
//Schedule
@Bean
public SchedulerFactoryBean getScheduler(SimpleTriggerFactoryBean simpleTriggerFactoryBean) {
SchedulerFactoryBean factoryBean=new SchedulerFactoryBean();
factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
return factoryBean;
}
}
QuartDemo01
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class QuartzDemo01 implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("定时时间为"+new Date());
}
}
Quart3(加入service类)
userService类
import org.springframework.stereotype.Service;
@Service
public class UserService {
public void add(){
System.out.println("添加人员");
}
}
quartzDemo03
import java.util.Date;
@Component
public class QuartzDemo03 implements Job{
@Autowired
private UserService userService;
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("Demo03------>"+new Date());
userService.add();
}
}
因为在demo中加入了服务,然而那个类没有添加到ioc容器中,所以我们要使用下面这个类将userService加入进去
myAdaptableJobFactory
import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;
@Component("myAdaptableJobFactory")
public class MyAdaptableJobFactory extends AdaptableJobFactory {
/**
* autowireCapableBeanFactory 可以将一个对象加入到ioc容器当中
*/
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object obj= super.createJobInstance(bundle);
this.autowireCapableBeanFactory.autowireBean(obj);
return obj;
}
}
quartzConfig
import com.sun.crypto.provider.PBEWithMD5AndDESCipher;
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 QuarztConfig03 {
@Bean
public JobDetailFactoryBean getJob(){
JobDetailFactoryBean job=new JobDetailFactoryBean();
job.setJobClass(QuartzDemo03.class);
return job;
}
@Bean
public SimpleTriggerFactoryBean getTrigger(JobDetailFactoryBean jobDetailFactoryBean){
SimpleTriggerFactoryBean factoryBean=new SimpleTriggerFactoryBean();
factoryBean.setJobDetail(jobDetailFactoryBean.getObject());
factoryBean.setRepeatInterval(3000);
factoryBean.setRepeatCount(4);
return factoryBean;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean,MyAdaptableJobFactory myAdaptableJobFactory){
SchedulerFactoryBean factoryBean=new SchedulerFactoryBean();
factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
factoryBean.setJobFactory(myAdaptableJobFactory);
return factoryBean;
}
}