Lorsque vous utilisez Quartz dans Spring Boot, vous devez généralement référencer les haricots gérés par le ressort dans le travail et les injecter automatiquement en définissant une usine d'emploi.
Spring a ses propres tâches de synchronisation d'horaire. Lorsqu'il est utilisé dans Spring Boot, il ne peut pas gérer dynamiquement les travaux, il est donc implémenté à l'aide de Quartz.
Configurer le quartz dans Spring Boot:
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 @ ActiveSchedulingPublic class QuartzSchedule {@autowired private myJobfactory myJobfactory; @Bean public schedulerFactoryBean schedulerFactoryBean () lève ioException {SchedulerFactoryBean factory = new schedulerfactoryBean (); factory.setOverwriteExistingJobs (true); // Delay Startup Factory.SetStartupDelay (20); // Charger la configuration de la source de données Quartz Factory.SetHartzProperties (QuartzProperties ()); // usine de travail personnalisée pour Spring Injection Factory.SetJobFactory (MyJobFactory); Retour Factory; } / ** * Charger la configuration de la source de données Quartz * * @return * @throws ioException * / @Bean Public Properties QuartzProperties () lève IOException {PropertiesFactoryBean PropertiesFactoryBean = new PropertiesFactoryBean (); PropertiesFactoryBean.SetLocation (new ClassPathResource ("/ quartz.properties")); PropertiesFactoryBean.AfterPropertiseSet (); Retour PropertiesFactoryBean.getObject (); }} Afin d'utiliser des haricots gérés par le printemps dans l'emploi, une usine d'emploi doit être redéfinie:
@ComponentPublic class MyJobFactory étend AdaptableJobFactory {@Autowired private AutowiRecapableBeAnfactory capableBeAnfactory; @Override Protected Object CreateJobinstance (TriggerFiredBundle Bundle) lève l'exception {// Appelez la méthode de l'objet de classe parent JobInstance = super.CreateJobinstance (bundle); // Inject CapableBeanFactory.AutowireBean (JobInstance); retourner JobInstance; }} Ensuite, vous pouvez utiliser les haricots gérés à ressort dans le travail
classe publique MyJob implémente le travail, serialisable {private static final long SerialVersionUID = 1l; Logger privé = loggerfactory.getLogger (this.getClass ()); @Autowired Private Some-Gervice Someservice; @Override public void execute (JobExEcutionContext Context) lève JobExEcutionException {SomeService.doSomething (); }} Le code suivant crée un travail:
Jobdetail jobdetail = jobbuilder.newjob (((job) class.forname (job.getClazz ()). NewInstance ()). GetClass ()) .WithIdentity (job.getJobName (), job.getJobgroup ()). Build (); jobdetail.getJobDatamap (). put ("extdata", job.getExtData ()); // Expression calendrierbuilder schedulebuilder = CronscheduleBuilder.cronschedule (job.getCronexpression ()) .WithMisfireHandlingInstructionDonothing (); // Créez un déclencheur TriggerBuilder <Crontrigger> TriggerBuilder = TriggerBuilder.Newtrigger (). Withentity (TriggerKey) .WithSchedule (SchedualBuilder); if (job.getStartTime ()! = null) {TriggerBuilder.Startat (job.getStartTime ()); } if (job.getEndTime ()! = null) {TriggerBuilder.endat (job.getEndTime ()); } CronTrigger Trigger = TriggerBuilder.Build (); Scheduler.ScheduleJob (JobDetail, Trigger); // Inject to Management Class Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.