Вообще говоря, вам следует реализовать запланированную логику, определить, когда она будет выполняться, и инициализировать запланированные задания при запуске сервера приложений.
Реализация запланированной логики
Ваш запланированный класс должен реализовать интерфейс org.quartz.Job
и переопределить его execute () , который содержит логику запланированного задания. В вашем случае это метод обновления файла XML. Вы должны сделать так, чтобы этот метод не имел никаких зависимостей от JSF, так что его можно вызывать вне JSF.
public class MyScheduledJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
updateXML();
}
}
Инициализация и запуск кварца
Quartz предоставляет ServletContextListener
с именем QuartzInitializerListener , который позволяет инициализировать и запускать Quartz при запуске сервера приложений.
Добавьте этот слушатель к вашему web.xml
<listener>
<listener-class> org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
</listener>
По умолчанию он ищет файл с именем quartz.properties
в пути к классам для инициализации Quartz. Вы можете обратиться this для получения дополнительной информации о настраиваемых параметрах, доступных в quartz.properties
Определите, какое задание будет выполняться в какое время
Вы можете определить его в XML-файле (определение его схемы можно найти здесь ) и настроить XMLSchedulingDataProcessorPlugin в quartz.properties
для загрузки этого XML при инициализации Quartz.
Например, в quartz.properties
org.quartz.plugin.jobInitializer.class
= org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
Затем в quartz-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data
xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
version="1.8">
<schedule>
<job>
<name>MyScheduledJob</name>
<group>MyScheduledGroup</group>
<description>Job to update XML </description>
<job-class>com.xxxx.xxxx.xxxx.MyScheduledJob </job-class>
</job>
<trigger>
<cron>
<name>midNightTrigger</name>
<job-name>MyScheduledJob</job-name>
<job-group>MyScheduledGroup</job-group>
<!-- It will run every night at 3:30 am -->
<cron-expression>0 30 3 * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
Все вышеизложенное относится к Quartz 'последней версии 2.1. Вы можете проверить примеры кодов и учебники от Quartz для получения дополнительной информации.