Quartz scheduler 通过查看文件夹在Quartz中动态调度作业

Quartz scheduler 通过查看文件夹在Quartz中动态调度作业,quartz-scheduler,quartz.net,Quartz Scheduler,Quartz.net,使用代码安排作业很容易,但我希望根据文件夹的内容安排作业 例如: 我希望\MyApp\Jobs\中的文件夹包含一些XML文件,这些文件将包含有关要计划的IJob的信息 问题是,我希望监视此文件夹中XML文件的更改,当发现一个新文件时,将使用XML中包含的信息安排一个新的IJob 我应该如何实现这样的机制 谢谢java.io.File类有一些listFiles方法,它们将列出目录的内容。如果要限制以某种方式返回的文件名,请使用FileFilter或FilenameFilter。在睡眠循环中这样做,

使用代码安排作业很容易,但我希望根据文件夹的内容安排作业

例如:

我希望\MyApp\Jobs\中的文件夹包含一些XML文件,这些文件将包含有关要计划的IJob的信息

问题是,我希望监视此文件夹中XML文件的更改,当发现一个新文件时,将使用XML中包含的信息安排一个新的IJob

我应该如何实现这样的机制

谢谢

java.io.File类有一些listFiles方法,它们将列出目录的内容。如果要限制以某种方式返回的文件名,请使用FileFilter或FilenameFilter。在睡眠循环中这样做,大约60秒,以避免占用所有CPU


希望这能有所帮助。

您不需要使用文件监视程序监视文件中的更改。 创建quartz属性文件时,它具有以下选项: 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。

您可以选择java或.net版本吗?虽然它们非常相似,但如果你想在某个或另一个平台上获得特定的信息,那么如果你的标记也是特定的,这可能会有所帮助。我刚才说的是.NET:但我刚刚发现,它可以通过FileSystemWatcher来实现。谢谢该.Net类存在一些问题。只是要知道。