通过观察文件夹在Quartz中动态安排作业

时间:2014-10-15 11:42:07

标签: quartz-scheduler quartz.net

使用代码调度作业很简单,但我想根据文件夹的内容安排作业。

例如:

我希望“\ MyApp \ Jobs \”中的文件夹包含一些XML文件,这些文件将包含有关要安排的IJob的信息。

问题是我希望监视此文件夹的更改(对于XML文件),当找到新文件时,将使用XML中包含的信息安排新的IJob。

我应该怎么做才能实现这样的机制?

由于

2 个答案:

答案 0 :(得分:0)

java.io.File 有一些 listFiles()方法,它们将列出目录的内容。如果要限制以某种方式返回的文件名,请使用 FileFilter FilenameFilter 。在“睡眠”循环中执行此操作,例如60秒,以避免咀嚼所有CPU。

希望这有帮助。

答案 1 :(得分:0)

您不需要使用文件观察器来监视文件中的更改。 在创建quartz属性文件时,它有选项as 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>

请注意我使用的是石英java api。