2011-09-19 47 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> 

回答