Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Configuration
- @ConditionalOnProperty(name = "quartz.enabled")
- public class SchedulerConfig {
- @Bean
- public JobFactory jobFactory(ApplicationContext applicationContext) {
- AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
- jobFactory.setApplicationContext(applicationContext);
- return jobFactory;
- }
- @Bean
- public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource, JobFactory jobFactory,
- @Qualifier("sampleJobTrigger") Trigger sampleJobTrigger) throws IOException {
- SchedulerFactoryBean factory = new SchedulerFactoryBean();
- // this allows to update triggers in DB when updating settings in config
- // file:
- factory.setOverwriteExistingJobs(true);
- factory.setDataSource(dataSource);
- factory.setJobFactory(jobFactory);
- factory.setQuartzProperties(quartzProperties());
- // factory.setTriggers(sampleJobTrigger);
- return factory;
- }
- @Bean
- public Properties quartzProperties() throws IOException {
- PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
- propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
- propertiesFactoryBean.afterPropertiesSet();
- return propertiesFactoryBean.getObject();
- }
- @Bean
- public JobDetailFactoryBean sampleJobDetail(String name) {
- return createJobDetail(SampleJob.class,name);
- }
- @Bean(name = "sampleJobTrigger")
- public SimpleTriggerFactoryBean sampleJobTrigger(@Qualifier("sampleJobDetail") JobDetail jobDetail,
- @Value("${samplejob.frequency}") long frequency) {
- return createTrigger(jobDetail, frequency);
- }
- public static JobDetailFactoryBean createJobDetail(Class jobClass,String name) {
- JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
- factoryBean.setJobClass(jobClass);
- factoryBean.setName(name);
- // job has to be durable to be stored in DB:
- factoryBean.setDurability(true);
- return factoryBean;
- }
- private static SimpleTriggerFactoryBean createTrigger(JobDetail jobDetail, long pollFrequencyMs) {
- SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
- factoryBean.setJobDetail(jobDetail);
- factoryBean.setStartDelay(0L);
- factoryBean.setRepeatInterval(pollFrequencyMs);
- factoryBean.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
- // in case of misfire, ignore all missed triggers and continue :
- factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT);
- return factoryBean;
- }
- // Use this method for creating cron triggers instead of simple triggers:
- public static CronTriggerFactoryBean createCronTrigger(JobDetail jobDetail, String cronExpression) {
- CronTriggerFactoryBean factoryBean = new CronTriggerFactoryBean();
- factoryBean.setJobDetail(jobDetail);
- factoryBean.setCronExpression(cronExpression);
- factoryBean.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
- return factoryBean;
- }
- }
- public void saveScheduledTime(String name) throws SchedulerException, ParseException {
- JobDetailFactoryBean jobDetailFactoryBean = SchedulerConfig.createJobDetail(SampleJob.class,name);
- JobDetail jobDetail = jobDetailFactoryBean.getObject();
- CronTriggerFactoryBean cronTriggerFactoryBean = SchedulerConfig.createCronTrigger(jobDetail, "0/5 * * * * ?");
- Trigger trigger = cronTriggerFactoryBean.getObject();
- Scheduler scheduler = new StdSchedulerFactory().getScheduler();
- scheduler.start();
- scheduler.scheduleJob(jobDetail, trigger);
- }
- INFO : org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'TestQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
- INFO : org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1
- INFO : com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge15x9h1hec5jd1ksgs1d|5b540c33, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.postgresql.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge15x9h1hec5jd1ksgs1d|5b540c33, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:postgresql://localhost:5432/cycle, lastAcquisitionFailureDefaultUser -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 0, maxStatementsPerConnection -> 120, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
- INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Freed 1 triggers from 'acquired' / 'blocked' state.
- INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Handling 2 trigger(s) that missed their scheduled fire-time.
- INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Recovering 0 jobs that were in-progress at the time of the last shut-down.
- INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Recovery complete.
- INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 'complete' triggers.
- INFO : org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 1 stale fired job entries.
- INFO : org.quartz.core.QuartzScheduler - Scheduler TestQuartzScheduler_$_NON_CLUSTERED started.
- org.quartz.SchedulerException: JobDetail cannot be null
- at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:849)
- at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)
- at com.cycleforgreen.java.webService.WebServiceContoller.saveScheduledTime(WebServiceContoller.java:856)
- at com.cycleforgreen.java.webService.WebServiceContoller.blockCycle(WebServiceContoller.java:836)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:606)
- at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
- at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
- at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
- at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
- at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
- at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
- at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement