2017-02-20 1 views
0

Je ne sais pas comment accéder au contexte d'origine de mon application à partir d'un travail Quartz.Accéder à mon contexte d'application à partir de QuartzJob

Je peux voir que les deux contexte ne sont pas communiquées parce que je suis en train d'injecter un grain de DAO comme une propriété de mon Quartz grain de travail et je reçois cette erreur:

No such bean named: "the DAO bean that I am trying to inject as a property".

Est-il possible d'utiliser un DAO de mon QuartzJob?

+1

Astuce: lors de la communication en anglais, utilisez des acronymes anglais. Sinon, vous aurez des gens se demandant ce que p. un OAD est, au lieu de répondre à votre question. – walen

+1

Copie possible de [Utilisation de la session Hibernate avec quartz] (http://stackoverflow.com/questions/4446103/using-hibernate-session-with-quartz) –

Répondre

0

(Affiché au nom de l'OP).

Solution:

Dans le Job (il est obligatoire d'obtenir une interface):

public class SchedulerJob extends QuartzJobBean { 
public void executeInternal(JobExecutionContext context) 
     throws JobExecutionException { 
    try{ 
     <YOUR_BEAN_DAO_INTERFACE_OBJECT> = ((ApplicationContext) context.getJobDetail().getJobDataMap().get("applicationContext")).get("<YOUR_BEAN_DAO_INTERFACE_ID>"); 
    } catch (Exception e){ 
     e.printStackTrace(); 
     return; 
    } 
} 
} 

Dans le contexte .xml de l'application: Il est également nécessaire de déclarer <YOUR_BEAN_DAO_INTERFACE> dans ce XML en tant que bean:

<!-- Spring Quartz Scheduler job --> 
<bean name="schedulerJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="<PATH_OF_YOUR_CLASS_JOB>.SchedulerJob" /> 
    <property name="applicationContextJobDataKey" value="applicationContext" /> 
</bean> 

<!-- Cron Trigger, run every 10 seconds --> 
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="schedulerJob" /> 
    <property name="cronExpression" value="0/10 * * * * ?" /> 
</bean> 

<!-- DI --> 
<bean id="scheduler" 
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="jobDetails"> 
     <list> 
      <ref bean="schedulerJob" /> 
     </list> 
    </property> 

    <property name="triggers"> 
     <list> 
      <ref bean="cronTrigger" /> 
     </list> 
    </property> 
</bean>