springBoot整合Quartz
添加依赖包
< ! -- Quartz 坐标 -->
< dependency>
< groupId> org.quartz-scheduler< /groupId>
< artifactId> quartz< /artifactId>
< version> 2.2.1< /version>
< exclusions>
< exclusion>
< artifactId> slf4j-api< /artifactId>
< groupId> org.slf4j< /groupId>
< /exclusion>
< /exclusions>
< /dependency>
< ! -- 添加 Scheduled 坐标 -->
< dependency>
< groupId> org.springframework< /groupId>
< artifactId> spring-context-support< /artifactId>
< /dependency>
< ! -- Sprng tx 坐标 -->
< dependency>
< groupId> org.springframework< /groupId>
< artifactId> spring-tx< /artifactId>
< /dependency>
添加控制类
@Controller
public class TestController {
public void getObjectData( ) {
System.out.println( "********Object********" ) ;
System.out.println( "Execute...." +new Date( )) ;
}
}
创建任务对象
/**
* 定义任务类
*/
public class QuartzJob implements Job {
@Autowired
private TestController testController;
/**
* 任务被触发时所执行的方法
*/
@Override
public void execute( JobExecutionContext arg0) throws JobExecutionException {
testController.getObjectData( ) ;
}
}
重写AdaptableJobFactory的方法
/**
* MyAdaptableJobFactory 重写了类AdaptableJobFactory
* 如果不重写 则默认不会注入到IOC中 而是直接创建了一个对象,重写目的是创建对象后能放入IOC容器中
* @author admin
*/
@Component( "myAdaptableJobFactory" )
public class MyAdaptableJobFactory extends AdaptableJobFactory {
/**
* AutowireCapableBeanFactory 可以将一个对象添加到 SpringIOC 容器中, 并且完成该对象注入
*/
@Autowired
private AutowireCapableBeanFactory autowireCapableBeanFactory;
/**
*该方法需要将实例化的任务对象手动的添加到 springIOC 容器中并且完成对 象的注入
*/
@Override
protected Object createJobInstance( TriggerFiredBundle bundle) throws Exception {
Object obj = super.createJobInstance( bundle) ;
//将 obj 对象添加 Spring IOC 容器中,并完成注入
this.autowireCapableBeanFactory.autowireBean( obj) ;
return obj;
}
}
创建配置对象
/**
* Quartz 配置类
* @author admin
* @date 2019-11-23
*/
@Configuration
public class QuartzConfig {
/**
* 1.创建 Job 对象
*/
@Bean
public JobDetailFactoryBean jobDetailFactoryBean( ) {
JobDetailFactoryBean factory = new JobDetailFactoryBean( ) ;
//关联我们自己的 Job 类
factory.setJobClass( QuartzJob.class) ;
return factory;
}
/**
* 2.创建 Cron Trigger
*/ @Bean
public CronTriggerFactoryBean cronTriggerFactoryBean( JobDetailFactoryBean jobDetailFactoryBean) {
CronTriggerFactoryBean factory = new CronTriggerFactoryBean( ) ;
//关联 JobDetail 对象
factory.setJobDetail( jobDetailFactoryBean.getObject( )) ;
//设置触发时间
factory.setCronExpression( "0/2 * * * * ?" ) ;
return factory;
}
/**
* 3.创建 Scheduler 对象
*/
@Bean
public SchedulerFactoryBean schedulerFactoryBean( CronTriggerFactoryBean cronTriggerFactoryBean,MyAdaptableJobFactory myAdaptableJobFactory) {
SchedulerFactoryBean factory = new SchedulerFactoryBean( ) ;
//关联trigger
factory.setTriggers( cronTriggerFactoryBean.getObject( )) ;
factory.setJobFactory( myAdaptableJobFactory) ;
return factory;
}
}
添加启动类
/**
* SpringBoot 启动类
* @author admin
* @date 2019-11-23
*/
@SpringBootApplication
@EnableScheduling
public class SpringBootTestApplication {
public static void main( String[ ] args) {
SpringApplication.run( SpringBootTestApplication.class, args) ;
}
}