проблемы с ApplicationContext и Spring batch - PullRequest
0 голосов
/ 20 сентября 2011

Я работаю с пакетом Spring, я выполнил пакетное задание, настроенный с помощью XML-файла, я также поместил всю конфигурацию Quartz в этот XML-файл (триггер, schedulerFactoryBean и jobDetail); это Java-проект, и я пытаюсь загрузить контекст приложения, как отдельный элемент в основном классе; как указано в документации, это должно заставить Quartz запускаться и делать это, проблема в том, что когда задание запускается с триггером и вызывает службу, это похоже на то, что все компоненты Autowired еще не были загружены, поэтому я NullpointerException ... это код, который вызывается заданием после срабатывания триггера, и когда создается JobParametersBuilder, когда все происходит сбой, хотя Quartz все еще работает ...

Может ли кто-нибудь помочь мне с этим?

// класс, вызываемый заданием

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-файле:

<!-- 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>

1 Ответ

0 голосов
/ 25 сентября 2011

Попробуйте org.springframework.scheduling.quartz.JobDetailBean вместе с jobDataAsMap для класса задания DI

Пример:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html#scheduling-quartz-jobdetail

...