Проблема с кварцем и пружинной загрузкой - PullRequest
0 голосов
/ 30 июня 2018

Итак, у меня есть техническая проблема, с которой мне нужна помощь.

В крупномасштабном проекте используется планировщик Quartz, чтобы запланировать выполнение задания каждую ночь в 9.
Задание, которое запланировано, однако должно считывать значения из файлов свойств, получать некоторые bean-компоненты с помощью автоматической разводки и т. Д.

Когда я использовал аннотации @Autowired и @Value, я обнаружил, что значения равны нулю.

Проблема в том, что Quartz создает объекты JobDetail, используя newJob() вне контейнера пружины. Как видно из приведенного ниже кода.

JobKey jobKey = new JobKey("NightJob", "9-PM Job");
JobDetail jobDetail = newJob(NightJob.class).withIdentity(jobKey)
                     .usingJobData("Job-Id", "1")
                     .build();

Объект jobDetail, который охватывает NightJob, таким образом, не может получить доступ к файлам свойств или bean-компонентам с помощью Spring.

Вот мой NightJob класс

public class NightJob implements Job{

    //@Value to read from property file; here
    //@Autowired to use some beans; here

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException{
    }
}

Я отсканировал переполнение стека и включил в шорт-лист несколько решений. Я также прочитал комментарии и перечислил главные встречные комментарии.

Предложение 1: Избавьтесь от Quartz и используйте Spring Batch благодаря его хорошей интеграции с Spring Boot

Аргумент счетчика 1: Spring Batch излишен для простых задач. Использовать @ Запланировано

Предложение 2: Используйте аннотации @Scheduled и выражения cron, предоставляемые spring

Аргумент счетчика 2: Ваша заявка не будет готова в будущем, если вы удалите Quartz. Сложное планирование может потребоваться в будущем

Предложение 3: Используйте интерфейс пружины ApplicationContextAware.

Аргумент счетчика 3: Множество дополнительного кода. Поражает простую и легкую концепцию Spring boot

Существует ли более простой способ в Spring Boot для доступа к значениям файла свойств и объектам автосшивки в классе, который реализует задание Quartz (в этом случае класс NightJob)

1 Ответ

0 голосов
/ 30 июня 2018

Как написано в комментариях, Spring поддерживает внедрение bean-компонентов в задания Quartz, предоставляя методы установки: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-quartz.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...