Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- JobDetail emailJob = JobBuilder.newJob(EMailJob.class)
- .withIdentity("someJobKey", "immediateEmailsGroup")
- .storeDurably()
- .build();
- SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
- .withIdentity("someTriggerKey", "immediateEmailsGroup")
- .startAt(fireTime)
- .build();
- // pass initialization parameters into the job
- emailJob.getJobDataMap().put(NotificationConstants.MESSAGE_PARAMETERS_KEY, messageParameters);
- emailJob.getJobDataMap().put(NotificationConstants.RECIPIENT_KEY, recipient);
- if (!scheduler.checkExists(jobKey) && scheduler.getTrigger(triggerKey) != null) {
- // schedule the job to run
- Date scheduleTime1 = scheduler.scheduleJob(emailJob, trigger);
- }
- public class EMailJob implements Job {
- @Autowired
- private JavaMailSenderImpl mailSenderImpl;
- public EMailJob() {
- }
- public void execute(JobExecutionContext context)
- throws JobExecutionException {
- ....
- try {
- mailSenderImpl.send(mimeMessage);
- } catch (MessagingException e) {
- ....
- throw new JobExecutionException("EMailJob failed: " + jobKey.getName(), e);
- }
- logger.info("EMailJob finished OK");
- }
- @Autowired
- private JavaMailSenderImpl mailSenderImpl;
- 2011-08-15 14:16:38,687 [main] INFO org.springframework.context.support.GenericApplicationContext - Bean 'org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler#0' is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
- 2011-08-15 14:16:38,734 [main] INFO org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1328c7a: defining beans [...]; root of factory hierarchy
- 2011-08-15 14:16:39,734 [main] INFO com.cambridgedata.notifications.EMailJob - EMailJob() - initializing ...
- 2011-08-15 14:16:39,937 [main] INFO org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor - Validated configuration attributes
- 2011-08-15 14:16:40,078 [main] INFO org.springframework.security.web.access.intercept.FilterSecurityInterceptor - Validated configuration attributes
- 2011-08-15 14:16:40,296 [main] INFO org.springframework.jdbc.datasource.init.ResourceDatabasePopulator - Executing SQL script from class path resource ...
- 2011-08-15 14:17:14,031 [main] INFO com.mchange.v2.log.MLog - MLog clients using log4j logging.
- 2011-08-15 14:17:14,109 [main] INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-0.9.1.1 [built 15-March-2007 01:32:31; debug? true; trace: 10]
- 2011-08-15 14:17:14,171 [main] INFO org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
- 2011-08-15 14:17:14,171 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.0.1 created.
- 2011-08-15 14:17:14,187 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Using thread monitor-based data access locking (synchronization).
- 2011-08-15 14:17:14,187 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized.
- 2011-08-15 14:17:14,187 [main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.0.1) 'NotificationsScheduler' with instanceId 'NON_CLUSTERED'
- Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
- NOT STARTED.
- Currently in standby mode.
- Number of jobs executed: 0
- Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
- Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is not clustered.
- 2011-08-15 14:17:14,187 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'NotificationsScheduler' initialized from the specified file : 'spring/quartz.properties' from the class resource path.
- 2011-08-15 14:17:14,187 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.0.1
- 2011-08-15 14:17:14,234 [main] 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 -> 2sajb28h1lcabf28k3nr1|13af084, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2sajb28h1lcabf28k3nr1|13af084, idleConnectionTestPeriod -> 50, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/2010rewrite2, lastAcquisitionFailureDefaultUser -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 5, maxStatements -> 0, maxStatementsPerConnection -> 120, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> select 0 from dual, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> true, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
- 2011-08-15 14:17:14,312 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Freed 0 triggers from 'acquired' / 'blocked' state.
- 2011-08-15 14:17:14,328 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Recovering 0 jobs that were in-progress at the time of the last shut-down.
- 2011-08-15 14:17:14,328 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Recovery complete.
- 2011-08-15 14:17:14,328 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 'complete' triggers.
- 2011-08-15 14:17:14,328 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 stale fired job entries.
- 2011-08-15 14:17:14,328 [main] INFO org.quartz.core.QuartzScheduler - Scheduler NotificationsScheduler_$_NON_CLUSTERED started.
- 2011-08-15 14:17:14,515 [NotificationsScheduler_QuartzSchedulerThread] INFO com.cambridgedata.notifications.EMailJob - EMailJob() - initializing ...
- <bean id="jobFactoryBean" class="org.springframework.scheduling.quartz.SpringBeanJobFactory">
- </bean>
- <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="configLocation" value="classpath:spring/quartz.properties"/>
- <property name="jobFactory" ref="jobFactoryBean"/>
- </bean>
- @PostConstruct
- public void initNotificationScheduler() {
- try {
- //sf = new StdSchedulerFactory("spring/quartz.properties");
- //scheduler = sf.getScheduler();
- scheduler = schedulerFactoryBean.getScheduler();
- scheduler.start();
- ....
- 2011-08-15 21:49:42,968 [main] INFO org.springframework.scheduling.quartz.SchedulerFactoryBean - Loading Quartz config from [class path resource [spring/quartz.properties]]
- 2011-08-15 21:49:43,031 [main] INFO com.mchange.v2.log.MLog - MLog clients using log4j logging.
- 2011-08-15 21:49:43,109 [main] INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-0.9.1.1 [built 15-March-2007 01:32:31; debug? true; trace: 10]
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.0.1 created.
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Using thread monitor-based data access locking (synchronization).
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized.
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.0.1) 'schedulerFactoryBean' with instanceId 'NON_CLUSTERED'
- Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
- NOT STARTED.
- Currently in standby mode.
- Number of jobs executed: 0
- Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads.
- Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is not clustered.
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'schedulerFactoryBean' initialized from an externally provided properties instance.
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.0.1
- 2011-08-15 21:49:43,187 [main] INFO org.quartz.core.QuartzScheduler - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@566633
- 2011-08-15 21:49:43,265 [main] 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 -> 1hge13f8h1lsg7py1rg0iu0|1956391, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge13f8h1lsg7py1rg0iu0|1956391, idleConnectionTestPeriod -> 50, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/2010rewrite2, lastAcquisitionFailureDefaultUser -> null, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 5, maxStatements -> 0, maxStatementsPerConnection -> 120, minPoolSize -> 1, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> select 0 from dual, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> true, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
- 2011-08-15 21:49:43,343 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Freed 0 triggers from 'acquired' / 'blocked' state.
- 2011-08-15 21:49:43,359 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Recovering 0 jobs that were in-progress at the time of the last shut-down.
- 2011-08-15 21:49:43,359 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Recovery complete.
- 2011-08-15 21:49:43,359 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 'complete' triggers.
- 2011-08-15 21:49:43,359 [main] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - Removed 0 stale fired job entries.
- 2011-08-15 21:49:43,359 [main] INFO org.quartz.core.QuartzScheduler - Scheduler schedulerFactoryBean_$_NON_CLUSTERED started.
- 2011-08-15 21:49:43,562 [schedulerFactoryBean_QuartzSchedulerThread] ERROR org.quartz.core.ErrorLogger - An error occured instantiating job to be executed. job= 'immediateEmailsGroup.DEFAULT.jobFor_1000new1'
- org.quartz.SchedulerException: Problem instantiating class 'com.cambridgedata.notifications.EMailJob' - [See nested exception: java.lang.AbstractMethodError: org.springframework.scheduling.quartz.SpringBeanJobFactory.newJob(Lorg/quartz/spi/TriggerFiredBundle;Lorg/quartz/Scheduler;)Lorg/quartz/Job;]
- at org.quartz.core.JobRunShell.initialize(JobRunShell.java:141)
- at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:381)
- Caused by: java.lang.AbstractMethodError: org.springframework.scheduling.quartz.SpringBeanJobFactory.newJob(Lorg/quartz/spi/TriggerFiredBundle;Lorg/quartz/Scheduler;)Lorg/quartz/Job;
- at org.quartz.core.JobRunShell.initialize(JobRunShell.java:134)
- 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;
- 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;
- }
- }
- @Bean
- public SchedulerFactoryBean quartzScheduler() {
- SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean();
- ...
- AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
- jobFactory.setApplicationContext(applicationContext);
- quartzScheduler.setJobFactory(jobFactory);
- ...
- return quartzScheduler;
- }
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <propertyy name="triggers">
- <list>
- <ref bean="simpleTrigger"/>
- </list>
- </property>
- <property name="applicationContextSchedulerContextKey">
- <value>applicationContext</value>
- </property>
- appCtx = (ApplicationContext)context.getScheduler().getContext().get("applicationContextSchedulerContextKey");
- <bean name="myJobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
- <property name="jobClass"
- value="my.cool.class.myCoolJob" />
- <property name="jobDataAsMap">
- <map>
- <entry key="myBean" value-ref="myBean" />
- </map>
- </property>
- </bean>
- public void executeInternal(JobExecutionContext context)
- <bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="configLocation" value="classpath:spring/quartz.properties"/>
- <property name="jobFactory">
- <bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory" />
- </property>
- <property name="schedulerContextAsMap">
- <map>
- <entry key="mailService" value-ref="mailService" />
- </map>
- </property>
- </bean>
- <bean id="jobTriggerFactory"
- class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
- <property name="targetBeanName">
- <idref local="jobTrigger" />
- </property>
- </bean>
- <bean id="jobTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"
- scope="prototype">
- <property name="group" value="myJobs" />
- <property name="description" value="myDescription" />
- <property name="repeatCount" value="0" />
- </bean>
- <bean id="jobDetailFactory"
- class="org.springframework.beans.factory.config.ObjectFactoryCreatingFactoryBean">
- <property name="targetBeanName">
- <idref local="jobDetail" />
- </property>
- </bean>
- <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean"
- scope="prototype">
- <property name="jobClass" value="com.cambridgedata.notifications.EMailJob" />
- <property name="volatility" value="false" />
- <property name="durability" value="false" />
- <property name="requestsRecovery" value="true" />
- </bean>
- <bean id="notificationScheduler" class="com.cambridgedata.notifications.NotificationScheduler">
- <constructor-arg ref="quartzScheduler" />
- <constructor-arg ref="jobDetailFactory" />
- <constructor-arg ref="jobTriggerFactory" />
- </bean>
- public void executeInternal(JobExecutionContext context)
- throws JobExecutionException {
- logger.info("EMailJob started ...");
- ....
- SchedulerContext schedulerContext = null;
- try {
- schedulerContext = context.getScheduler().getContext();
- } catch (SchedulerException e1) {
- e1.printStackTrace();
- }
- MailService mailService = (MailService)schedulerContext.get("mailService");
- ....
- public NotificationScheduler(final Scheduler scheduler,
- final ObjectFactory<JobDetail> jobDetailFactory,
- final ObjectFactory<SimpleTrigger> jobTriggerFactory) {
- this.scheduler = scheduler;
- this.jobDetailFactory = jobDetailFactory;
- this.jobTriggerFactory = jobTriggerFactory;
- ...
- // create a trigger
- SimpleTrigger trigger = jobTriggerFactory.getObject();
- trigger.setRepeatInterval(0L);
- trigger.setStartTime(new Date());
- // create job details
- JobDetail emailJob = jobDetailFactory.getObject();
- emailJob.setName("new name");
- emailJob.setGroup("immediateEmailsGroup");
- ...
- ApplicationContext springContext =
- WebApplicationContextUtils.getWebApplicationContext(ContextLoaderListener .getCurrentWebApplicationContext().getServletContext());
- Bean bean = (Bean) springContext.getBean("beanName");
- bean.method();
- public class NotificationScheduler {
- private SchedulerFactory sf;
- private Scheduler scheduler;
- @PostConstruct
- public void initNotificationScheduler() {
- try {
- sf = new StdSchedulerFactory("spring/quartz.properties");
- scheduler = sf.getScheduler();
- scheduler.start();
- // test out sending a notification at startup, prepare some parameters...
- this.scheduleImmediateNotificationJob(messageParameters, recipients);
- try {
- // wait 20 seconds to show jobs
- logger.info("sleeping...");
- Thread.sleep(40L * 1000L);
- logger.info("finished sleeping");
- // executing...
- } catch (Exception ignore) {
- }
- } catch (SchedulerException e) {
- e.printStackTrace();
- throw new RuntimeException("NotificationScheduler failed to retrieve a Scheduler instance: ", e);
- }
- }
- public void scheduleImmediateNotificationJob(){
- try {
- JobKey jobKey = new JobKey("key");
- Date fireTime = DateBuilder.futureDate(delayInSeconds, IntervalUnit.SECOND);
- JobDetail emailJob = JobBuilder.newJob(EMailJob.class)
- .withIdentity(jobKey.toString(), "immediateEmailsGroup")
- .build();
- TriggerKey triggerKey = new TriggerKey("triggerKey");
- SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
- .withIdentity(triggerKey.toString(), "immediateEmailsGroup")
- .startAt(fireTime)
- .build();
- // schedule the job to run
- Date scheduleTime1 = scheduler.scheduleJob(emailJob, trigger);
- } catch (SchedulerException e) {
- logger.error("error scheduling job: " + e.getMessage(), e);
- e.printStackTrace();
- }
- }
- @PreDestroy
- public void cleanup(){
- sf = null;
- try {
- scheduler.shutdown();
- } catch (SchedulerException e) {
- e.printStackTrace();
- }
- }
- @Component
- public class EMailJob implements Job {
- @Autowired
- private JavaMailSenderImpl mailSenderImpl;
- ... }
- ...
- <context:property-placeholder location="classpath:spring/*.properties" />
- <context:spring-configured/>
- <context:component-scan base-package="com.mybasepackage">
- <context:exclude-filter expression="org.springframework.stereotype.Controller"
- type="annotation" />
- </context:component-scan>
- <bean id="mailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="host" value="${mail.host}"/>
- <property name="port" value="${mail.port}"/>
- ...
- </bean>
- <bean id="notificationScheduler" class="com.mybasepackage.notifications.NotificationScheduler">
- </bean>
- AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
- "org.springframework:spring-context-support:4..."
- "org.springframework:spring-support:2..."
- @Override
- public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler)
- @Override
- protected Object createJobInstance(final TriggerFiredBundle bundle)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement