Al usar cuarzo en el arranque de primavera, generalmente necesita hacer referencia a los frijoles administrados por la primavera en el trabajo y inyectarlos automáticamente definiendo una fábrica de trabajo.
Spring tiene sus propias tareas de tiempo de horario. Cuando se usa en Spring Boot, no puede administrar dinámicamente los trabajos, por lo que se implementa utilizando cuarzo.
Configurar cuarzo en el arranque de primavera:
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; org.springframework.context.annotation.configuration; import org.springframework.core.io.classpathresource; import org.springframework.scheduling.annotation.enablescheduling; importar; org.springframework.scheduling.quartz.schedulerFactoryBean;@configuration@habilitanChedulingPublic Class QuartzSchedule {@aUtowired private myJobFactory myJobFactory; @Bean Public SchedulerFactoryBean SchedulerFactoryBean () lanza IOException {SchedulerFactoryBean Factory = new SchedulerFactoryBean (); factory.setOverWriteExistingJobs (verdadero); // retrasar startup factory.setStartUpDelay (20); // Cargar la configuración de la fuente de datos de cuarzo Factory.setquartzProperties (QuartzProperties ()); // fábrica de trabajo personalizada para fábrica de inyección de primavera.setJobFactory (myJobFactory); Return Factory; } / ** * Cargar la configuración de la fuente de datos de cuarzo * * @return * @throws ioexception * / @bean pública Propiedades QuartzProperties () lanza IOException {PropertiesFactoryBean PropertiesFactoryBean = new PropertyFactoryBean (); PropertiesFactoryBean.SetLocation (nuevo classpathResource ("/cuarzo.properties")); PropertiesFactoryBean.AfterPropertiesSet (); return PropertiesFactoryBean.getObject (); }} Para usar frijoles administrados por primavera en el trabajo, una fábrica de trabajo debe redefinirse:
@ComponentPublic Class myJobFactory extiende adaptableJobFactory {@aUtowired private autowirecapableBeanFactory capableBeanFactory; @Override Object protegido CREATJObInStance (Bundle de TRIGGERFIREDBUNDLE) arroja excepción {// Llame al método del objeto de clase principal JobInstance = Super.CreateJobinStance (Bundle); // inyectar CapableBeanFactory.aUtowirebean (JobInstance); devolver Jobinstance; }} Entonces puedes usar frijoles administrados por primavera en el trabajo
clase pública myJob implementa trabajo, serializable {privado estático final long serialversionUid = 1l; private logger logger = loggerFactory.getLogger (this.getClass ()); @Autowired Private Someservice Someservice; @Override public void Execute (JobExecutionContext Context) lanza JobExecutionException {someservice.Dosomthing (); }} El siguiente código crea un trabajo:
JobDetail JobDetail = JobBuilder.newJob (((Job) Class.forname (Job.getClazz ()). NewInstance ()). GetClass ()) .WithIdentity (Job.getJobName (), Job.getJobGroup ()); JobDetail.getJobDatamap (). Put ("ExtData", Job.GetExtData ()); // Expressing ScheduleBuilder otriceBuilder = cronscheduleBuilder.CronsChedule (Job.getCronExpression ()) .WithMisFIRSHANDLINGINSTRUCTIONDONOTHING (); // construir un gatillo gathingBuilder <CronTrigger> TriggerBuilder = TriggerBuilder.NewTrigger (). WithIdidentity (TriggerKey) .WithsChedule (shellBuilder); if (job.getstarttime ()! = null) {TriggerBuilder.startat (Job.getStartTime ()); } if (job.getendtime ()! = null) {TriggerBuilder.endat (job.getendtime ()); } Crontrigger disparador = TriggerBuilder.Build (); Scheduler.scheduleJob (JobDetail, Trigger); // Inyectar a la clase de gestión Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.