引入quartz依赖:
<!-- 实现对 Quartz 的自动化配置 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
1. 创建Job
整合Quartz有两种方式创建Job:
- 继承QuartzJobBean抽象类 (由spring提供)
- 实现原生的Job接口
QuartzJobBean抽象类也实现了Job接口,并且定义共有的execute方法,子类可以继承QuartzJobBean并实现executeInternal
例1:继承QuartzJobBean抽象类
public class HelloJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { //打印当前日期和数据 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateformat = simpleDateFormat.format(date); //执行任务 System.out.println(dateformat+"--数据库备份!!"); } }
例2:实现Job接口
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 dateformat = simpleDateFormat.format(date); //执行任务 System.out.println(dateformat+"--数据库备份!!"); } }
2. 组件配置
两种方式:
- 使用Bean自动配置
- 使用Sechedler手动配置
2.1 自动配置
@Configuration public class HelloQuartzConfig { @Bean public JobDetail getJobDetail(){ JobDetail jobDetail = JobBuilder.newJob(HelloQuartzJobBeanJob.class) .withIdentity("hellojob", "hellogroup") .storeDurably()//设置当没有Trigger关联job时, 是否继续持久化job,默认为true,这个必须设置,因为在bean的创建中有先后顺序 .build(); return jobDetail; } @Bean public Trigger getTrigger(){ SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger() .withIdentity("helloTrigger", "helloTriggerGroup") .startNow() .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3)) .build(); return simpleTrigger; } @Bean public Scheduler getScheduler() throws SchedulerException { Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.scheduleJob(getJobDetail(),getTrigger()); return scheduler; } }
运行springboot:
2022-10-19 15:57:49--数据库备份!! 2022-10-19 15:57:52--数据库备份!! 2022-10-19 15:57:55--数据库备份!!
注:Job的storeDurably(true)必须加上,不然假如job先创建而trigger没有被初始化,那么这个job就被删除,之后trigger因为找不到job而报错
2.2 手动配置
手动配置:
- @Component
- 实现ApplicationRunner接口
@Component public class HelloJobInit implements ApplicationRunner { @Autowired Scheduler scheduler;//这个对象必须引入,本地创建不会被调用 @Override public void run(ApplicationArguments args) throws Exception { JobDetail jobDetail = JobBuilder.newJob(HelloQuartzJobBeanJob.class) .withIdentity("job1","jobgroup1") .storeDurably() .build(); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ? *"); // 创建任务触发器 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("01Trigger","01TriggerGroup") .startNow() //立即執行一次任務 .withSchedule(scheduleBuilder) .build(); // 手动将触发器与任务绑定到调度器内 scheduler.scheduleJob(jobDetail, trigger); } }
注:Scheduler scheduler对象必须使用Spring进行注入,本地创建会失效
输出:
2022-10-19 16:19:40--数据库备份!! 2022-10-19 16:19:45--数据库备份!! 2022-10-19 16:19:50--数据库备份!! 2022-10-19 16:19:55--数据库备份!! 2022-10-19 16:20:00--数据库备份!! 2022-10-19 16:20:05--数据库备份!!
3. Quartz的配置
SpringBoot集成Quartz配置,可以在application.yml的配置Quartz
以下是quartz的一下配置项:
spring: # Quartz 的配置,对应 QuartzProperties 配置类 quartz: job-store-type: memory # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。 auto-startup: true # Quartz 是否自动启动 startup-delay: 0 # 延迟 N 秒启动 wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true overwrite-existing-jobs: false # 是否覆盖已有 Job 的配置 properties: # 添加 Quartz Scheduler 附加属性 org: quartz: threadPool: threadCount: 25 # 线程池大小。默认为 10 。 threadPriority: 5 # 线程优先级 class: org.quartz.simpl.SimpleThreadPool # 线程池类型
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109