使用代码安排作业很容易,但我想根据文件夹的内容安排作业。
例如:我希望“\MyApp\Jobs”中的文件夹包含一些 XML 文件,这些文件将包含有关要安排的 IJob 的信息。
问题是我希望监视此文件夹的更改(对于 XML 文件),并且当找到新文件时,将使用 XML 中包含的信息安排新的 IJob。
我应该怎么做才能实现这样的机制?
类 java.io.File 有一些 listFiles() 方法,可以列出目录的内容。如果您想以某种方式限制返回的文件名,请使用 FileFilter 或 FilenameFilter。在带有“睡眠”的循环中执行此操作(例如 60 秒),以避免耗尽所有 CPU。
您不需要使用文件观察器来观察文件的更改。 创建石英属性文件时,它有以下选项
org.quartz.plugin.jobInitializer.scanInterval = 5
扫描 xml 文件更改。因此在上述情况下,它每 5 秒扫描一次
我完整的quartz.property文件如下
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames =C:/Users/Admin/Documents/NetBeansProjects/QXmlTest/src/java/quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound =true
org.quartz.plugin.jobInitializer.scanInterval = 5
org.quartz.plugin.jobInitializer.wrapInUserTransaction= 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>AJob</name>
<group>AGroup</group>
<description>Print a welcome message</description>
<job-class>mypackage.SchedulerJob</job-class>
</job>
<trigger>
<cron>
<name>dummyTriggerName</name>
<job-name>AJob</job-name>
<job-group>AGroup</job-group>
<!-- It will run every 5 seconds -->
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
请注意,我使用的是quartz java api。