2011-09-19 118 views
0

我正在使用Spring批處理,我完成了批處理作業,使用xml文件進行配置, 我還將所有Quartz配置放在該xml文件中(觸發器,schedulerFactoryBean和的JobDetail);這是一個java項目,我試圖加載應用程序上下文,作爲一個獨立的主類;就文檔說的,這應該使Quartz開始運行並且正在執行,問題在於當作業與觸發器一起運行並調用服務時,就像所有的Autowired bean尚未加載一樣,我是一個NullpointerException ... 這是在觸發器被觸發後作業調用的代碼,當創建JobParametersBuilder時,當一切都崩潰時,Quartz仍在運行,儘管...ApplicationContext和Spring批處理問題

有人可以幫助這個嗎?

//由作業稱爲類

public class MainJobClass { 

    private static Logger log = Logger.getLogger(MainJobClass.class); 

    @Autowired 
    private SimpleJobLauncher launcher; 
    @Autowired 
    private Job job; 

    public void executeJob(){ 

     try{ 

      log.info("***** Staring job......"); 

      JobParametersBuilder builder = new JobParametersBuilder(); 
      builder.addDate("date", new Date()); 
      builder.addString("sendEmailJob", "Send email to approvers"); 
      JobParameters parameters = builder.toJobParameters(); 

      launcher.run(job, parameters); 


     }catch(Exception e){ 
      log.error("Error on executing job"+e.fillInStackTrace()); 
     } 
    } 

    public void setLauncher(SimpleJobLauncher launcher) { 
     this.launcher = launcher; 
    } 

    public void setJob(Job job) { 
     this.job = job; 
    } 

簡單的主要方法調用應用程序上下文:

public static void main(String[] args){  
ApplicationContext context = new ClassPathXmlApplicationContext("/com/ge/grt/email/grt_email_send.xml"); 

      } 

錯誤行:

INFO [DefaultQuartzScheduler_Worker-1] (MainJobClass.java:29) - ***** Staring job...... 
ERROR [DefaultQuartzScheduler_Worker-1] (MainJobClass.java:40) - Error on executing jobjava.lang.NullPointerException 

這是對XML的石英豆file:

<!-- Scheudler Factory bean, the job will run when the context is loaded --> 
    <bean id="schedulerFactoryBean" 
     class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
       <ref bean="beanTrigger"></ref> 
      </list> 
     </property> 
    </bean> 

    <!-- definition of the trigger --> 
    <!-- defining the execution date: (once every week on monday at 8:00 AM) --> 
    <bean id="beanTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
     <property name="jobDetail" ref="jobDetail" /> 
     <property name="misfireInstructionName" value="MISFIRE_INSTRUCTION_FIRE_ONCE_NOW"/> 
<!--   <property name="cronExpression" value="0 0 8 ? * MON" /> --> 
     <property name="cronExpression" value="0 0/1 * * * ?" /> 
    </bean> 


<!-- definiton of job detail bean --> 
    <bean id="jobDetail" 
     class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
     <property name="targetObject" ref="mainJobClass" /> 
     <property name="targetMethod" value="executeJob" /> 
     <property name="concurrent" value="false"></property> 
    </bean> 

回答