SpringBoot集成Quartz

1. 基于Api的方式@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)pu

大家好,关于SpringBoot集成Quartz很多朋友都还不太明白,今天小编就来为大家分享关于的知识,希望对各位有所帮助!

它会实例化一个org.springframework.scheduling.quartz.SchedulerFactoryBean,同时在返回之前,会设置一个类似org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer的拦截器,可以设置一些关于SchedulerFactoryBean。

首先是application.properties,前缀是spring.quartz.properties,后缀还是原来的写法,

spring.quartz.properties.org.quartz.scheduler.instanceName=MySchedulerspring.quartz.properties.org.quartz.threadPool.threadCount=4spring.quartz.properties.org.quartz.jobStore.class=org.quartz.simpl.RAMJobStorespring. quartz.job-store-type=内存

1. 我们用SchedulerFactoryBeanCustomizer实现注入 .

@Beanpublic SchedulerFactoryBeanCustomizer SchedulerFactoryBeanCustomizer() { 返回新的SchedulerFactoryBeanCustomizer() { @Override public voidcustomize(SchedulerFactoryBean SchedulerFactoryBean) { Properties 属性=new Properties(); }尝试{properties.load(Thread .currentThread().getContextClassLoader().getResourceAsStream(‘quartz.properties’)); } catch (IOException e) { e.printStackTrace(); SchedulerFactoryBean.setQuartzProperties(属性); JobDetail 作业=JobBuilder.newJob(MyQuartzJobBean.class ).storeDurively().build();触发器触发器=TriggerBuilder.newTrigger().forJob(job).startNow() .withSchedule(SimpleScheduleBuilder.repeatHourlyForever().withIntervalInMilliseconds(1000)).build(); //调度器工厂Bean。设置作业详细信息(作业); //SchedulerFactoryBean.setTriggers(trigger); } };}

2. 直接注入

SpringBoot集成Quartz

@Beanpublic 触发器schedulerFactoryBean() { return TriggerBuilder.newTrigger().forJob(jobDetail()).startNow() .withSchedule(SimpleScheduleBuilder.repeatHourlyForever().withIntervalInMilliseconds(1000)) .build(); }@Beanpublic JobDetail jobDetail() { return JobBuilder.newJob(MyQuartzJobBean.class).storeDurically().build();} 这里需要注意的是,JobDetail需要设置storeDurically()为true,否则报错启动时会报告

org.springframework.beans.factory.BeanCreationException: 创建类路径资源中定义的名为“quartzScheduler”的bean 时出错[org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.class]: 调用init 方法失败;嵌套异常是org.quartz .SchedulerException: 在没有触发器的情况下添加的作业必须是持久的。

3. QuartzJobBean

org.springframework.scheduling.quartz.QuartzJobBean注入Bean,这个很独特,所以特意拿出来。

他实现了org.quartz.Job接口并实现了具体方法

SpringBoot集成Quartz

publicabstractclassQuartzJobBeanimplementsJob{@Overridepublicfinalvoidexecute(JobExecutionContextcontext) throwsJobExecutionException{try{ //这里是核心.不太好理解,但是注释还可以,这个实现应用了传递的-在作业数据映射中作为bean 属性值,然后委托给executeInternal。 BeanWrapper bw=PropertyAccessorFactory.forBeanPropertyAccess(this); MutablePropertyValues pvs=new MutablePropertyValues(); pvs.addPropertyValues(context.getScheduler().getContext()); pvs.addPropertyValues(context.getMergedJobDataMap( )); bw.setPropertyValues(pvs, true); } catch (SchedulerException ex) { 抛出新的JobExecutionException(ex); } 执行内部(上下文); } protected abstract voidexecuteInternal(JobExecutionContext context) throws JobExecutionException;}assed-injob data map asbean propertyvalues – 将映射的内容设置为bean 的字段属性

@PersistJobDataAfterExecution@Componentpublic class MyQuartzJobBean extends QuartzJobBean { public static Final String USER_NAME=’name’;私有字符串名称; public void setName(String name) { this.name=name; } } @Override protected voidexecuteInternal(JobExecutionContext context) 抛出JobExecutionException { System.out.println(‘Name=’ + name); JobDataMap map=context.getJobDetail().getJobDataMap(); map.put(USER_NAME, UUID.randomUUID().toString()); }} 输出:

名称=29f5aff1-52f0-47eb-be2c-a84bbe638a7a名称=828b594e-f918-42ca-93fe-e2321b2bf312名称=cb268907-ba2a-4bc7-8ca0-f0facd64a8e3名称=a3553825-2e8b-4 f5 0-b075-0402dfb1ee7a名称=d0a95144-50e9-49ca-97c3 – 5730900180d2Name=7c6ff206-3611-4264-915a-f188f747bdd8 所以它仍然可以.

用户评论

SpringBoot集成Quartz
爱到伤肺i

终于开始学习Spring Boot了,本来想跳过这个Quartz集成部分,现在看到这篇文章感觉很有用,可以帮我理解如何把任务的自动执行和Spring Boot结合起来。以前用的纯Java定时器太麻烦了。

    有15位网友表示赞同!

SpringBoot集成Quartz
有你,很幸福

做开发工作真是离不开Quartz这个工具!这篇写得挺好的,介绍得很详细,我正好在项目中要使用到它,希望能借鉴一下你的实现方式。

    有20位网友表示赞同!

SpringBoot集成Quartz
Edinburgh°南空

我一直觉得Spring Boot自带的调度功能已经很方便了,为什么要用Quartz呢?看来作者说得很有道理,Quartz更灵活,支持多种触发规则,还是得好好研究一下。

    有10位网友表示赞同!

SpringBoot集成Quartz
回忆未来

这篇博文帮我解决了我一个挺大的难题!之前想整合Quartz和Spring Boot遇到了不少坑,你的代码示例真的救了我的命,特地来回味一下,感觉你经验很丰富!

    有14位网友表示赞同!

SpringBoot集成Quartz
致命伤

看到文章标题就点进来,虽然我平时很少用到Quartz,但总觉得了解一下它还是很有必要的。看了你的例子之后,感觉整合起来并不复杂,也许以后项目中我会用到。

    有19位网友表示赞同!

SpringBoot集成Quartz
红玫瑰。

这种集成方法确实更方便吧,以前用的定时任务实现方式太过于繁琐了。不过我还是希望能看到一些实际案例,例如如何编写任务代码和配置触发规则,这样更能深入理解你的解说。

    有16位网友表示赞同!

SpringBoot集成Quartz
龙卷风卷走爱情

说实话,我个人不太喜欢Quartz的使用场景,因为它比较复杂,参数设置很多,容易出错,而且维护起来也麻烦。还是Spring Boot自带的调度功能更加简单易用靠谱。

    有8位网友表示赞同!

SpringBoot集成Quartz
青衫负雪

博主说Quartz比其他的定时调度机制更灵活、更有保障,确实令人有这样的感受。文章写的详细透彻,很适合新手入门学习Quartz的。希望你能多写一些技术类文章分享你的经验。

    有13位网友表示赞同!

SpringBoot集成Quartz
优雅的叶子

我一直在学Spring Boot,感觉你写的这篇文章很有帮助!尤其是对Quartz的讲解和使用方法都写的非常清楚,我能理解Quartz是如何与Spring Boot进行整合工作的。

    有14位网友表示赞同!

SpringBoot集成Quartz
纯情小火鸡

看来这个SpringBoot整合Quartz确实是一个很实用的技能。这篇博文将内容进行了结构化描述和代码示例的结合,学习起来很容易上手。感谢作者分享!

    有7位网友表示赞同!

SpringBoot集成Quartz
今非昔比'

我是个新手开发者,正在学习Spring Boot,这篇文章对我很实用!我对Quartz的实现原理还不清楚,以后可以通过这篇文章进一步了解它。

    有14位网友表示赞同!

SpringBoot集成Quartz
煮酒

我觉得这篇文章写的太详细了,对于初学者来说有些难度。如果能把内容简化一些,突出重点讲解,更容易理解其中的关键点。<br>

    有14位网友表示赞同!

SpringBoot集成Quartz
颜洛殇

我很喜欢你这篇博文!你将SpringBoot整合Quartz的过程清晰地描述出来了,还配上代码示例,让我快速上手掌握了这方面的知识。真棒!

    有5位网友表示赞同!

SpringBoot集成Quartz
独角戏°

我之前也遇到了类似的问题,想做类似的任务处理功能,不过没有用到Quartz这个工具。看了你的文章之后,感觉 Quartz确实是一个非常好的选择,会试着用一下。

    有15位网友表示赞同!

SpringBoot集成Quartz
此生一诺

博主你写的太棒了!这篇文章详细地解释了SpringBoot整合Quartz的过程,还提供了可用的代码示例, 完美解决了我一直困惑的问题,真是感激!

    有15位网友表示赞同!

SpringBoot集成Quartz
揉乱头发

文章内容很不错,讲解深入细致,对于想学习Spring Boot整合Quartz的人来说非常有用。特别是关于任务实现和触发规则的说明,受益匪浅!

    有7位网友表示赞同!

SpringBoot集成Quartz
孤城暮雨

虽然我平时用的不太多Quartz,但是这篇文章还是很有用。博主将SpringBoot整合Quartz的过程讲解的很清楚,代码示例也很清晰易懂,可以作为学习的参考。

    有8位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/118758.html

(0)
小su's avatar小su
上一篇 2024年9月1日 上午11:11
下一篇 2024年9月1日 上午11:14

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注