<强>前言强>
最近在项目中使用到定时任务,之前一直都是使用石英来实现,最近看春天基础发现其实春天提供春时间表可以帮助我们实现简单的定时任务功能。
下面说一下两种方式在春季启动项目中的使用。
<强>春季计划实现定时任务强>
春季计划实现定时任务有两种方式1。使用XML配置定时任务,2。使用@Scheduled注解。因为春天是启动项目可能尽量避免使用XML配置的形式,主要说注解的形式。
@ component 公开课ScheduleJobs { 最后公共静态长秒=1 * 1000; FastDateFormat fdf=FastDateFormat。getInstance (“yyyy-MM-dd HH: mm: ss”); @Scheduled (fixedDelay=第二* 2) 公共空间fixedDelayJob()抛出InterruptedException { TimeUnit.SECONDS.sleep (2); system . out。println (“[FixedDelayJob执行]”+ fdf。新日期格式(())); } } >之前
@ component 公开课ScheduleJobs { 最后公共静态长秒=1 * 1000; FastDateFormat fdf=FastDateFormat。getInstance (“yyyy-MM-dd HH: mm: ss”); @Scheduled (fixedRate=第二* 4) 公共空间fixedRateJob () { system . out。println (“[FixedRateJob执行]”+ fdf。新日期格式(())); } } >之前
@ component 公开课ScheduleJobs { 最后公共静态长秒=1 * 1000; FastDateFormat fdf=FastDateFormat。getInstance (“yyyy-MM-dd HH: mm: ss”); @Scheduled (cron=" 0/4 * * * * & # 63;”) 公共空间的计划(){ system . out。println(“[计划执行]”+ fdf。新日期格式(())); } } >之前<强>春季启动整合石英实现定时任务强>
<强>添加Maven依赖强>
& lt; dependency> & lt; groupId> org.quartz-scheduler & lt; artifactId> quartz & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework & lt; artifactId> spring-context-support & lt;/dependency><强>春季启动整合石英强>
春项目整合石英主要依靠添加SchedulerFactoryBean这个FactoryBean,所以在maven依赖中添加spring-context-support。
首先添加QuartzConfig类来声明相关豆
@ configuration 公开课QuartzConfig { @ autowired 私人SpringJobFactory SpringJobFactory; @ bean 公共SchedulerFactoryBean SchedulerFactoryBean () { SchedulerFactoryBean SchedulerFactoryBean=new SchedulerFactoryBean (); schedulerFactoryBean.setJobFactory (springJobFactory); 返回schedulerFactoryBean; } @ bean 公共调度器调度程序(){ .getScheduler返回schedulerFactoryBean () (); } } >之前这里我们需要注意我注入了一个自定义的JobFactory,然后把其设置为SchedulerFactoryBean的JobFactory。其目的是因为我在具体的工作中需要春天注入一些服务。
,所以我们要自定义一个jobfactory,让其在具体工作类实例化时使用春天的API来进行依赖注入。
SpringJobFactory具体实现:
@ component 公开课SpringJobFactory延伸AdaptableJobFactory { @ autowired 私人AutowireCapableBeanFactory capableBeanFactory; @Override 保护对象createJobInstance (TriggerFiredBundle包)抛出异常{ 对象jobInstance=super.createJobInstance(包); capableBeanFactory.autowireBean (jobInstance); 返回jobInstance; } } >之前具体使用(摘取自项目代码):
@ service 公共类QuartzEventServiceImpl实现QuartzEventService { 私有静态最终字符串JOB_GROUP=癳vent_job_group”; 私有静态最终字符串TRIGGER_GROUP=癳vent_trigger_group”; @ autowired 私人调度器调度程序; @Override 公共空间addQuartz(事件事件)抛出SchedulerException { JSONObject eventData=https://www.yisu.com/zixun/JSONObject.parseObject (event.getEventData ()); 日期triggerDate=eventData.getDate(“日期”); JobDetail工作=JobBuilder.newJob (EventJob.class) .withIdentity (event.getId () .toString (), JOB_GROUP) .usingJobData (buildJobDateMap(事件)).build (); 触发器触发=TriggerBuilder.newTrigger () .withIdentity (event.getId () .toString (), TRIGGER_GROUP) .startAt (triggerDate) .build (); 调度器。scheduleJob(工作,触发); }SpringBoot定时任务两种(春天进度与石英整合)实现方法