Ao usar o quartzo na inicialização da primavera, você geralmente precisa fazer referência a feijões gerenciados pela mola no trabalho e injetar-os automaticamente definindo uma fábrica de empregos.
A primavera tem suas próprias tarefas de tempo de cronograma. Quando usado no Spring Boot, ele não pode gerenciar dinamicamente os trabalhos, por isso é implementado usando o Quartz.
Configure quartzo na bota da primavera:
importar java.io.ioException; importar java.util.properties; importar org.springframework.beans.factory.annotation.autowired; importar org.springframework.bean.factory.config.propertiesfactoryBean; importação org.springFerwer.Contet.Contextion.annteation; org.springframework.context.annotation.configuration; importar org.springframework.core.io.classpathResource; importar org.springframework.scheduling.annotation.enablescheduling; import org.springframework.scheduling.quartz.schedulerFactoryBean;@Configuration@EnableSchedulingPublic Classe quartzschedule {@AUTOWIRED PRIVADO MyJobFactory myJobFactory; @Bean Public SchedulerFactoryBean SchedulerFactoryBean () lança IoException {SchedulerFactoryBean Factory = new SchedulerFactoryBean (); Factory.SeToverWriteExistingJobs (true); // Startup de atraso Factory.SetStartupDelay (20); // Carregar configuração de fonte de dados de quartzo Factory.SetQuartzProperties (QuartzProperties ()); // fábrica de empregos personalizada para fábrica de injeção de primavera.setJobFactory (myJobFactory); fábrica de retorno; } / ** * Carregar configuração da fonte de dados do quartzo * * @return * @throws ioexception * / @Bean Public Properties QuartzProperties () lança IoException {PropertiesFactoryBean PropertiesFactoryBean = New PropertiesFactoryBean (); PropertiesFactoryBean.SetLocation (New ClassPathResource ("/Quartz.properties")); PropertiesFactoryBean.AfterPropertiESSET (); Return PropertiesFactoryBean.getObject (); }} Para usar o feijão gerenciado pela primavera em emprego, uma fábrica de empregos precisa ser redefinida:
@ComPonenPublic Classe myJobFactory estende o adaptáveljobFactory {@AUTOWIRED PRIVADO AutowirecapableBeanFactory CapableBeanFactory; @Override Protected Object CreateJobInstance (pacote TriggerFiredBundle) lança Exceção {// Chame o método da classe pai objeto JobInstance = super.CreateJobInstance (pacote); // injeção capaz de capacidade.aUtowireBean (JobInstance); Retornar JobInstance; }} Então você pode usar o feijão gerenciado da primavera no trabalho
classe pública myjob implementa trabalho, serializável {private estático final serialversionuid = 1L; Logger privado Logger = LoggerFactory.getLogger (this.getClass ()); @Autowired Private SomerService SomService; @Override public void Execute (contexto de JobExecutionContext) lança JobExecutionException {SOMEVERSEVICE.DOSOMINGH (); }} O código a seguir cria um trabalho:
JobDetail JobDetail = JobBuilder.Newjob (((Job) Class.Forname (Job.GetClazz ()). NewInstance ()). jobDetail.getJobDatamap (). put ("extdata", job.geTextData ()); // Expression ScheduleBuilder ScheduleBuilder = CronscheduleBuilder.cronschedule (Job.getCronexpression ()) .WithmisFireHandlingInstructionDonothing (); // construa um gatilho TriggerBuilder <Cromntrigger> 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); // Injetar na classe de gerenciamento O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.