Я работаю с пакетом 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>