java - 使用一组触发器在quartz中安排作业

标签 java generics collections quartz-scheduler

我正在使用quartz 2.2,我想用一组触发器来安排一个作业。 我打算使用以下方法。

void scheduleJobs(Map<JobDetail, Set<? extends Trigger>> triggers, boolean replace)

我的问题是,如何创建一个接受扩展Trigger的类的SetTriggerBuilder 仅返回 Trigger,但我无法将相同的内容放入集合中。 我搜索了 API 但没有找到解决方案。

谢谢

最佳答案

纯 Java 中最简单的方法(可能不是最干净的方法)是执行以下操作:

    QuartzScheduler quartzScheduler = ...

    Set<Trigger> triggers = new HashSet<>();
    triggers.add(new SimpleTriggerImpl());
    triggers.add(new CronTriggerImpl());

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = new HashMap<>();
    triggersAndJobs.put(new JobDetailImpl(), triggers);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

或者,如果您没有使用 Java 7:

    QuartzScheduler quartzScheduler = ...

    Set<Trigger> triggers = new HashSet<Trigger>();
    triggers.add(new SimpleTriggerImpl());
    triggers.add(new CronTriggerImpl());

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = new HashMap<JobDetail, Set<? extends Trigger>>();
    triggersAndJobs.put(new JobDetailImpl(), triggers);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

Guava 的较短版本:

    QuartzScheduler quartzScheduler = ...

    Set<? extends Trigger> set = Sets.newHashSet(new SimpleTriggerImpl(), new CronTriggerImpl());

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = Maps.newHashMap();
    triggersAndJobs.put(new JobDetailImpl(), set);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

更新。使用 TriggerBuilder 实际上并没有多大改变。 TriggerBuilder.build() 返回一个触发器实例,可以像 Trigger 一样引用它。

    QuartzScheduler quartzScheduler = ...

    Set<Trigger> triggers = new HashSet<Trigger>();

    Trigger trigger1 = newTrigger()
            .withIdentity(triggerKey("myTrigger", "myTriggerGroup"))
            .withSchedule(simpleSchedule()
                    .withIntervalInHours(1)
                    .repeatForever())
            .startAt(futureDate(10, DateBuilder.IntervalUnit.MINUTE))
            .build();
    triggers.add(trigger1);

    Trigger trigger2 = newTrigger() ...
    triggers.add(trigger2);

    Map<JobDetail, Set<? extends Trigger>> triggersAndJobs = new HashMap<JobDetail, Set<? extends Trigger>>();
    triggersAndJobs.put(new JobDetailImpl(), triggers);

    quartzScheduler.scheduleJobs(triggersAndJobs, false);

关于java - 使用一组触发器在quartz中安排作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21292936/

相关文章:

java - 获取 InvalidMappingException : Could not parse mapping document from resource

java - 设计模式 : Lazy Singleton, 泛型和继承 : java. lang.Class 无法转换为 java.lang.reflect.ParameterizedType

c - 我收到错误 : petition of a member in something that it's not an structure or an enum in C

python - python集合模块中的命名约定不一致?

java - 在 web 应用程序的 jboss 服务器中进行新部署后,浏览器缓存文件未更新

Java 应用程序 tcp 连接丢失检测在 Windows 7 中有所不同?

java - 为什么我不能在 Java 中将数组的索引作为 int 返回?

c# - 动态创建具有自引用约束的 C# 泛型类型

java - 使用 Scanner 类扫描 int 时出错

java - 将 HashMap 键迭代器转换为列表迭代器