Quarz график работы с ошибками

1

У меня возникла проблема с использованием Quarz для планирования заданий в приложении Java на основе Spring. Вот мой обычай Job:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.package.UserService;

@Component
public class ConnectionIntervalJob implements Job {

@Autowired
private UserService userService;

   public void execute(JobExecutionContext jExeCtx) throws     JobExecutionException {
       userService.calculateDelta();
   }
}

Мой класс ConnectionScheduler:

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class ConnectionScheduler {
public ConnectionScheduler() throws Exception {
    Scheduler scheduler = new StdSchedulerFactory().getScheduler();
    JobDetail job = JobBuilder
            .newJob(com.package.ConnectionIntervalJob.class)
            .withIdentity("job1" + (int)Math.floor(Math.random()*10) + 3 , "group1" +(int)Math.floor(Math.random()*10) + 3).build();

    Trigger trigger = TriggerBuilder
            .newTrigger()
            .withIdentity("trigger" +(int)Math.floor(Math.random()*10) + 3, "group1" +(int)Math.floor(Math.random()*10) + 3)
            .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(20).withRepeatCount(5))
            .build();
    try {
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    } catch (SchedulerException e) {
        e.printStackTrace();
    }
}
}

Когда я создаю свой проект с помощью Apache Tomcat 7. Консоль регистрирует некоторые ошибки:

ERROR org.quartz.core.JobRunShell - Job group163.job163 threw an unhandled   Exception: 
java.lang.NullPointerException
at   com.package.jobs.ConnectionIntervalJob.execute(ConnectionIntervalJob.java:18)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at      org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
[DefaultQuartzScheduler_Worker-1] ERROR org.quartz.core.ErrorLogger - Job (group163.job163 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at    org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.lang.NullPointerException
at com.pakage.jobs.ConnectionIntervalJob.execute(ConnectionIntervalJob.java:18)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
... 1 more

Полагаю, я что-то испортил с именем задания и именем триггера. Из-за этого я решил создать случайную int vale и добавить ее к имени группы и имени триггера, но это не сработало. Я использовал следующую ссылку в качестве ссылки: quarz doc

ОБНОВИТЬ:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<!-- Database Configuration -->
<import resource="DataSource.xml" />
<import resource="hibernate.xml" />
<bean class="com.package7.config.WebSocketConfig" />

<!-- Auto scan the components -->
<context:annotation-config />
<context:component-scan base-package="com.package1.entities" />
<context:component-scan base-package="com.package2.ving.controllers" />
<context:component-scan base-package="com.package3.dao" />
<context:component-scan base-package="com.package4.daoimpl" />
<context:component-scan base-package="com.package5.serviceimpl" />
<context:component-scan base-package="com.package6.jobs" />

Любая помощь приветствуется! Спасибо!

  • 0
    Включите вашу конфигурацию XML.
  • 0
    XML включен в соответствии с просьбой
Показать ещё 1 комментарий
Теги:
spring
jobs

1 ответ

3

Вы, скорее всего, получаете NPE, потому что кварцевая работа не создается весной, поэтому инъекция не будет работать.

Попробуйте поместить в качестве первой строки метод execute().

SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

Это гарантирует, что зависимости будут введены в задание.

Изменить. Другой вариант, который у вас есть, - использовать интеграцию Spring-quartz вместо использования чистого кварца.

  • 0
    Благодарю за ваш ответ! Я попробую.
  • 0
    Нет, к сожалению, это не сработало: /
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню