Wenn Sie Quartz im Spring Boot verwenden, müssen Sie im Allgemeinen auf die auf den Feder verwalteten Bohnen in Job verweisen und diese automatisch injizieren, indem Sie eine Jobfabrik definieren.
Spring hat seine eigenen Zeitplan -Timing -Aufgaben. Wenn es im Spring Boot verwendet wird, kann es Jobs nicht dynamisch verwalten, sodass es mit Quartz implementiert wird.
Konfigurieren Sie Quartz im Spring Start:
importieren java.io.ioxception; import java.util.properties; import org.springframework.beans.factory.annotation org.springFramework.context.annotation.configuration; import org.springframework.core.io.classpatheResource; import org.springframework.Scheduling.Annotation QuartzSchedule {@autowired private myjobfactory myjobfactory; @Bean Public SchedulerFactoryBean SchedulerFactoryBean () löst ioException {planeLerFactoryBean factory = new SchedulerFactoryBean () aus; factory.setoverwriteExistingjobs (true); // Startup Factory.SetStartUpDelay (20) verzögern; // Quartz -Datenquellenkonfiguration laden.SetQuartzProperties (QuartzProperties ()); // benutzerdefinierte Jobfabrik für Spring Injection Factory.setjobfactory (myjobfactory); Rückgabefabrik; } / ** * Quartz -Datenquellenkonfiguration laden * * @return * @throws ioException * / @bean public Eigenschaften quartzProperties () löscht ioException {PropertiesFactoryBean PropertiesFactoryBean = new PropertiesFactoryBean (); PropertiesFactoryBean.SetLocation (neue classpathresource ("/quartz.properties")); PropertiesFactoryBean.afterProperTieStieSet (); Return PropertiesFactoryBean.getObject (); }} Um fedelhafte Bohnen in Job zu verwenden, muss eine Jobfabrik neu definiert werden:
@ComponentPublic Class MyJobfactory erweitert adaptableJobfactory {@autowired private AutoWirecapableBeArfactory factableBeanFactory; @Override Protected Object createJobinStance (TriggerFiredBundle Bundle) löst eine Ausnahme aus {// die Methode der übergeordneten Klasse -Objektjobs -Jobinstance = Super.CreateJobinStance (Bundle); // fähig injizeBeArtory.autowireBean (JobInstance); Return Jobinstance; }} Dann können Sie im Job Spring Managed Beans verwenden
öffentliche Klasse myjob implementiert job, serialisierbar {private statische endgültige long serialversionuid = 1l; private logger logger = loggerFactory.getLogger (this.getClass ()); @Autowired Private SomeService SomeService; @Override public void execute (JobExecutionContext Context) löst JobExecutionException {someservice.dosomething () aus; }} Der folgende Code erstellt einen Job:
Jobdetail JobDetail = Jobbuilder.Newjob (((Job) class.forname (job.getClazz ()). NewInstance ()). GetClass ()). JobDetail.getjobDatamap (). Put ("extdata", job.getextData ()); // Expression ScheduleBuilder planbuilder = cronSchedulebuilder.conSchedule (Job.getConexpression (). // Erstellen Sie einen Trigger TriggerBuilder <Crontrigger> TriggerBuilder = TriggerBuilder.Newtrigger (). Mit Identität (TriggerKey) .withSchedule (planbuilder); if (Job.getStartTime ()! } if (Job.getendTime ()! = null) {TriggerBuilder.endat (Job.getendTime ()); } Crontrigger Trigger = TriggerBuilder.build (); Scheduler.Schedulejob (JobDetail, Trigger); // Injize in die Verwaltungsklasse injizieren Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.