上一个示例仅展示了java硬编码式的配置,更多的应用场景是使用外部配置文件,灵活配置调度策略,以便于随时改变调度策略,如下是外部配置的代码示例:

    1. cron4j=task1, task2
    2. task1.cron=* * * * *
    3. task1.class=com.xxx.TaskAaa
    4. task1.daemon=true
    5. task1.enable=true
    6. task2.cron=* * * * *
    7. task2.class=com.xxx.TaskBbb
    8. task2.daemon=true
    9. task2.enable=false

    上例中的cront4j是所谓的配置名称:configName,可以随便取名,这个名称在创建Cron4jPlugin对象时会被用到,如果创建Cron4jPlugin对象时不提供名称则默认值为 “cron4j”。

    上例中的configName后面紧跟着的是task1、task2,表示当前配置的两个task 的名称,这两个名称规定了后续的配置将以其打头,例如后面的task1.cron、task2.cron都是以这两个task名称打头的。

    上例中的task1.cron是指该task的cron表达式,task1.class是指该task要调度的目标java类,该java类需要实现Runnable接口,task1.daemon是指被调度的任务线程是否为守护线程,task1.enable是指该task是开启还是停用,这个配置不是必须的,可以省略,省略时默认表示开启。同理task2的配置与task1的意义相同,只是taskName不同。

    总结一下:configName指定taskName,多个taskName可以逗号分隔,而每个taskName指定具体的task,每个具体的task有四项配置:cron、class、deamon、enable,每个配置以taskName打头。

    假定配置文件名为config.txt,配置完成以后Cron4jPlugin的创建方式可以如下:

    1. cp = new Cron4jPlugin("config.txt");
    2. cp = new Cron4jPlugin("config.txt", "cron4j");
    3. cp = new Cron4jPlugin(PropKit.use("config.txt"));
    4. cp = new Cron4jPlugin(PropKit.use("config.txt"), "cron4j");
    5. me.add(cp);

    以上代码中,前四行代码是利用配置文件创建Cron4jPlugin对象的四种方式,第一行代码只传入了配置文件名,省去了configName,那么默认值为“cron4j”。第二代码与第一行代码本质一样,只是指定了其configName。第三与第四行代码与前两行代码类似,仅仅是利用PropKit对其进行了加载。

    请注意:这里所说的configName,就是前面示例中配置项 cron4j\=task1, task2 中的 “cron4j”,这个configName相当于就是Cron4jPlugin寻找的配置入口。