Forked from jelies/AutowiringSpringBeanJobFactory.java
Created
April 23, 2019 14:32
-
-
Save vinyoliver/0723a5d3a8906e85517ee2a76b4fc2d9 to your computer and use it in GitHub Desktop.
Revisions
-
jelies revised this gist
Mar 4, 2013 . 1 changed file with 2 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,5 +1,6 @@ package com.jelies.spring3tomcat7.service.proceso; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.stereotype.Service; @@ -11,7 +12,7 @@ @Service @Transactional public class ExampleService implements Job { @Autowired private ExampleRepository exampleRepository; -
jelies created this gist
Mar 4, 2013 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,31 @@ package com.jelies.spring3tomcat7.config.quartz; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.scheduling.quartz.SpringBeanJobFactory; /** * This JobFactory autowires automatically the created quartz bean with spring @Autowired dependencies. * * @author jelies (thanks to Brian Matthews: http://webcache.googleusercontent.com/search?q=cache:FH-N1i--sDgJ:blog.btmatthews.com/2011/09/24/inject-application-context-dependencies-in-quartz-job-beans/+&cd=7&hl=en&ct=clnk&gl=es) * */ public final class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactory; @Override public void setApplicationContext(final ApplicationContext context) { beanFactory = context.getAutowireCapableBeanFactory(); } @Override protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { final Object job = super.createJobInstance(bundle); beanFactory.autowireBean(job); return job; } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,26 @@ package com.jelies.spring3tomcat7.service.proceso; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jelies.spring3tomcat.model.entity.Example; import com.jelies.spring3tomcat.repository.ExampleRepository; import com.jelies.spring3tomcat.service.ExampleService; @Service @Transactional public class ExampleService { @Autowired private ExampleRepository exampleRepository; @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { Example example = new Example(); example.setFoo("test"); exampleRepository.save(example); } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,98 @@ package com.jelies.spring3tomcat7.config; import java.io.IOException; import java.util.Properties; import javax.annotation.PostConstruct; import javax.sql.DataSource; import org.quartz.Trigger; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.JobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.transaction.PlatformTransactionManager; import com.jelies.spring3tomcat7.config.quartz.AutowiringSpringBeanJobFactory; @Configuration public class QuartzConfig { private final Logger log = LoggerFactory.getLogger(this.getClass().getSimpleName()); @Autowired private DataSource dataSource; @Autowired private PlatformTransactionManager transactionManager; @Autowired private ApplicationContext applicationContext; @PostConstruct public void init() { log.debug("QuartzConfig initialized."); } @Bean public SchedulerFactoryBean quartzScheduler() { SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean(); quartzScheduler.setDataSource(dataSource); quartzScheduler.setTransactionManager(transactionManager); quartzScheduler.setOverwriteExistingJobs(true); quartzScheduler.setSchedulerName("jelies-quartz-scheduler"); // custom job factory of spring with DI support for @Autowired! AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory(); jobFactory.setApplicationContext(applicationContext); quartzScheduler.setJobFactory(jobFactory); quartzScheduler.setQuartzProperties(quartzProperties()); Trigger[] triggers = { procesoMQTrigger().getObject() }; quartzScheduler.setTriggers(triggers); return quartzScheduler; } @Bean public JobDetailFactoryBean procesoMQJob() { JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean(); jobDetailFactory.setJobClass(ExampleService.class); jobDetailFactory.setGroup("spring3-quartz"); return jobDetailFactory; } @Bean public CronTriggerFactoryBean procesoMQTrigger() { CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); cronTriggerFactoryBean.setJobDetail(procesoMQJob().getObject()); cronTriggerFactoryBean.setCronExpression(0 * * * * ?); cronTriggerFactoryBean.setGroup("spring3-quartz"); return cronTriggerFactoryBean; } @Bean public Properties quartzProperties() { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties")); Properties properties = null; try { propertiesFactoryBean.afterPropertiesSet(); properties = propertiesFactoryBean.getObject(); } catch (IOException e) { log.warn("Cannot load quartz.properties."); } return properties; } }