1.话不多说,先看一下项目的整体结构
2.看完后,第一步建好项目后就是导入依赖,打开pom.xml,添加如下依赖
<!-- mybatis启动器 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!--Quartz坐标--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> </dependency> <!--定时任务需要依赖context模块--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency>3.从项目结构中可以看出,一共就三个主要的类,两个配置,一个job工作类 我们先写 MyAdaptableJobFactory.class
import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.scheduling.quartz.AdaptableJobFactory; import org.springframework.stereotype.Component; /** * AdaptableJobFactory:作用采用反射机制创建Job实例 * 需要重写方法:1:采用反射机制创建Job实例 2:需要将job实例手动放入到IOC容器中 */ @Component public class MyAdaptableJobFactory extends AdaptableJobFactory{ //将对象添加到IOC容器中,并完成该对象的注入 @Autowired AutowireCapableBeanFactory autowireCapableBeanFactory; //1:采用反射机制创建Job实例 2:需要将job实例手动放入到IOC容器中 @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Object job=super.createJobInstance(bundle); //job实例手动放入到Spring IOC容器中.并完成注入 autowireCapableBeanFactory.autowireBean(job); return job; }4.然后我们在写一个最关键的类 QuartzConfig.class
import com.yl.springbootmybatisquartz.quartz.HelloJob; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.JobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; /** * Quartz的配置类,创建job,trigger.scheduler的对象 * @author yl */ @Configuration public class QuartzConfig { //1:创建Job对象 @Bean public JobDetailFactoryBean getJobDetailFactoryBean() { JobDetailFactoryBean jobDetailFactory=new JobDetailFactoryBean(); //关联自己的job jobDetailFactory.setJobClass(HelloJob.class);//这里的HelloJob是自己定义的工作类,名字自取 return jobDetailFactory; } //2:corn trigger对象创建 @Bean public CronTriggerFactoryBean getCronTriggerFactoryBean(JobDetailFactoryBean j) { CronTriggerFactoryBean factory=new CronTriggerFactoryBean(); //关联jobDetail对象 factory.setJobDetail(j.getObject()); //设置触发时间cron表达式 factory.setCronExpression("0/1 * * * * ?"); return factory; } //3:创建Scheduler对象 @Bean public SchedulerFactoryBean getSchedulerFactoryBean( CronTriggerFactoryBean t,MyAdaptableJobFactory myAdaptableJobFactory) { SchedulerFactoryBean factory=new SchedulerFactoryBean(); //关联trigger对象 factory.setTriggers(t.getObject()); //重新设置job实例化工厂 factory.setJobFactory(myAdaptableJobFactory); return factory; } }5.接着在写一个自己的job工作类,名字可以自己取。我这里测试就叫 HelloJob.class
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * @author yl */ public class HelloJob implements Job{ //执行定时任务的方法 @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("hello, world"); } }5.最后一步,就是修改一下我们的启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.scheduling.annotation.EnableScheduling; //exclude = DataSourceAutoConfiguration.class //设置不配置数据库,(连数据库的话就去掉,我这里测试就不连了) @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @EnableScheduling//开启定时任务注解 public class SpringbootQuartzApplication { public static void main(String[] args) { SpringApplication.run(SpringbootQuartzApplication.class, args); } }有啥问题欢迎评论,谢谢大家支持!