Уже два дня я пытаюсь понять, как заставить вещи работать. У меня есть приложение Java Spring, и я хочу использовать XMLSchedulingDataProcessorPlugin для запуска заданий в моем приложении. Это класс заданий, который я определил:
public class MyJob implements Job
{
private final static Logger LOGGER = Logger.getLogger(MyJob.class.getName());
public MyJob() {
System.out.println("My Job");
LOGGER.log(Level.INFO, "My Job");
}
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
LOGGER.setLevel(Level.INFO);
LOGGER.log(Level.INFO, "my job fired");
System.out.println("my job fired");
}
}
Довольно просто. Ниже приведен файл quartz.properties, который я определил для запуска ранее определенного задания:
org.quartz.scheduler.instanceName: MySchedulerForMyJob
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.skipUpdateCheck: true
org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames: quartz_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound: true
org.quartz.plugin.jobInitializer.scanInterval: 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 3
org.quartz.threadPool.threadPriority: 5
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
Теперь давайте посмотрим, как я определил файл quartz_jobs.xml, на который я обращаю внимание Quartz:
<?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>myJob</name>
<group>MYJOB_GROUP</group>
<description>This job is a job</description>
<job-class>com.myProject.MyJob</job-class>
</job>
<trigger>
<cron>
<name>myTrigger</name>
<group>MYTRIGGER_GROUP</group>
<job-name>myJob</job-name>
<job-group>MYJOB_GROUP</job-group>
<!-- trigger every 5 seconds -->
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
В основном при запуске я ожидаю, что сообщение "моя работа сработает" печатается каждые 5 секунд. Я не вижу ничего подобного, предполагая, что работа не началась. Вот что я получаю в качестве вывода в моей консоли:
2018-09-11 10:02:39,944 - INFO - [org.quartz.core.SchedulerSignalerImpl] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2018-09-11 10:02:39,944 - INFO - [org.quartz.core.QuartzScheduler] - Quartz Scheduler v.1.6.3 created.
2018-09-11 10:02:39,945 - INFO - [org.quartz.simpl.RAMJobStore] - RAMJobStore initialized.
2018-09-11 10:02:39,945 - INFO - [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler 'org.springframework.scheduling.quartz.SchedulerFactoryBean#0' initialized from an externally provided properties instance.
2018-09-11 10:02:39,945 - INFO - [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler version: 1.6.3
2018-09-11 10:02:39,946 - INFO - [org.quartz.core.QuartzScheduler] - JobFactory set to: org.springframework.scheduling.quartz.AdaptableJobFactory@ad570f2
2018-09-11 10:02:40,220 - WARN - [org.apache.axis.utils.JavaUtils] - Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
2018-09-11 10:02:40,319 - INFO - [org.quartz.core.QuartzScheduler] - Scheduler org.springframework.scheduling.quartz.SchedulerFactoryBean#0_$_NON_CLUSTERED started.
Quartz Initializer Servlet loaded, initializing Scheduler...
2018-09-11 10:02:40,326 - INFO - [org.quartz.core.SchedulerSignalerImpl] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2018-09-11 10:02:40,326 - INFO - [org.quartz.core.QuartzScheduler] - Quartz Scheduler v.1.6.3 created.
2018-09-11 10:02:40,326 - INFO - [org.quartz.simpl.RAMJobStore] - RAMJobStore initialized.
2018-09-11 10:02:40,326 - INFO - [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler 'MySchedulerForMyJob' initialized from default resource file in Quartz package: 'quartz.properties'
2018-09-11 10:02:40,326 - INFO - [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler version: 1.6.3
2018-09-11 10:02:40,326 - INFO - [org.quartz.core.QuartzScheduler] - Scheduler MPListScheduler_$_NON_CLUSTERED started.
Scheduler has been started...
Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY
Это говорит о том, что файл quartz.properties
правильно прочитан, поскольку в нем указано 2018-09-11 10:02:40,326 - INFO - [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler 'MySchedulerForMyJob' initialized from default resource file in Quartz package: 'quartz.properties'
со ссылкой на правильное имя планировщика, которое я дал в quartz.properties
.
Что может быть не так во всем этом, чтобы задание не начиналось?