时间:2021-05-02
在spring boot中使用quartz时,在job中一般需要引用spring管理的bean,通过定义job factory实现自动注入。
spring有自己的schedule定时任务,在spring boot中使用的时候,不能动态管理job,于是就使用quartz来实现。
在spring boot中配置quartz:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.ioexception; import java.util.properties; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.config.propertiesfactorybean; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.core.io.classpathresource; import org.springframework.scheduling.annotation.enablescheduling; import org.springframework.scheduling.quartz.schedulerfactorybean; @configuration @enablescheduling public class quartzschedule { @autowired private myjobfactory myjobfactory; @bean public schedulerfactorybean schedulerfactorybean() throws ioexception { schedulerfactorybean factory = new schedulerfactorybean(); factory.setoverwriteexistingjobs(true); // 延时启动 factory.setstartupdelay(20); // 加载quartz数据源配置 factory.setquartzproperties(quartzproperties()); // 自定义job factory,用于spring注入 factory.setjobfactory(myjobfactory); return factory; } /** * 加载quartz数据源配置 * * @return * @throws ioexception */ @bean public properties quartzproperties() throws ioexception { propertiesfactorybean propertiesfactorybean = new propertiesfactorybean(); propertiesfactorybean.setlocation(new classpathresource("/quartz.properties")); propertiesfactorybean.afterpropertiesset(); return propertiesfactorybean.getobject(); } }为了在job中使用spring管理的bean,需要重新定义一个job factory:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @component public class myjobfactory extends adaptablejobfactory { @autowired private autowirecapablebeanfactory capablebeanfactory; @override protected object createjobinstance(triggerfiredbundle bundle) throws exception { // 调用父类的方法 object jobinstance = super.createjobinstance(bundle); // 进行注入 capablebeanfactory.autowirebean(jobinstance); return jobinstance; } }然后在job中就可以使用spring管理的bean了
? 1 2 3 4 5 6 7 8 9 10 11 12 public class myjob implements job, serializable { private static final long serialversionuid = 1l; private logger logger = loggerfactory.getlogger(this.getclass()); @autowired private someservice someservice; @override public void execute(jobexecutioncontext context) throws jobexecutionexception { someservice.dosomething(); } }下面代码是创建job:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 jobdetail jobdetail = jobbuilder.newjob(((job) class.forname(job.getclazz()).newinstance()).getclass()) .withidentity(job.getjobname(), job.getjobgroup()).build(); jobdetail.getjobdatamap().put("extdata", job.getextdata()); // 表达式调度构建器 cronschedulebuilder schedulebuilder = cronschedulebuilder.cronschedule(job.getcronexpression()) .withmisfirehandlinginstructiondonothing(); // 构建一个trigger triggerbuilder<crontrigger> triggerbuilder = triggerbuilder.newtrigger().withidentity(triggerkey) .withschedule(schedulebuilder); if (job.getstarttime() != null) { triggerbuilder.startat(job.getstarttime()); } if (job.getendtime() != null) { triggerbuilder.endat(job.getendtime()); } crontrigger trigger = triggerbuilder.build(); scheduler.schedulejob(jobdetail, trigger);// 注入到管理类以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/softidea/p/6073495.html
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
springboot集成mybatis关键代码如下:1,添加pom引用org.mybatis.spring.bootmybatis-spring-boot-st
不过在实际的工作中,很少会直接用到它。通常都是用的spring-quartz组件,直接通过配置,让spring框架来自动装配如下就是spring框架集成quar
Spring中配置Quartz的过程:1.导入JAR包quartz需要的JAR包,已经包含在spring中,位置在spring解压后目录的\lib\quartz
我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会
下面给大家介绍spring不能注入static变量的原因,具体详情如下所示:Spring依赖注入是依赖set方法set方法是是普通的对象方法static变量是类