【问题标题】:quartz grails multi-entity environment石英grails多实体环境
【发布时间】:2015-01-05 19:32:41
【问题描述】:

我有一个有多个用户的网络应用程序(grails 2.3.5,quartz 插件)。现在我希望我的用户可以使用石英安排工作。我想知道最好的方法是将来自一个用户的触发器与来自另一个用户的触发器分开。

例如提供给定用户的所有计划任务列表

是否有任何建议如何进行这种区分?

【问题讨论】:

    标签: grails quartz-scheduler grails-plugin


    【解决方案1】:

    实施一些命名触发器的方案可能是这里最好的方法。这样您就可以查询作业的触发器并通过某种匹配模式对其进行过滤。

    您可以自行决定如何管理触发器的可见性和管理。在我看来,使用触发器名称似乎是最合乎逻辑的方法。

    或者,您可以构建一个将触发器与用户相关联的框架(例如域模型)。

    更新

    根据您评论的内容,我想向您介绍如何为现有工作动态添加触发器。这只是一个示例,可帮助您在实现目标的道路上走得更远。

    import org.quartz.CronScheduleBuilder
    import org.quartz.Trigger
    import org.quartz.TriggerBuilder
    ...
    def jobManagerService
    
    String cronExpression = ... // whatever the expression is
    
    Trigger trigger = TriggerBuilder.newTrigger()
        .withIdentity("UniqueNameOfYourTriggerHere-UserId")
        .withPriority(6)
        .forJob("com.example.package.JobClassNameJob", "groupName")
        .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
        .build()
    
    // if you need job parameters
    trigger.jobDataMap.putAll([param1: 'example'])
    
    jobManagerService.getQuartzScheduler().scheduleJob(trigger)
    

    【讨论】:

    • 当我查看数据库中来自石英的表时,我看到了一个名为 QUARTZ_CALENDER 的表。是否可以为每个用户使用一个日历并以这种方式进行分离?只是猜测。
    • 您不应该直接通过数据库修改 Quartz 的支持数据。这是石英本身的内部。如果你这样做,我不知道结果会是什么。通常,您将希望使用 Quartz 提供的服务和工厂来添加/删除/暂停/恢复与作业相关的触发器,并让它自己管理数据存储。我高估了您对 Quartz 的理解,因此我的回答假设您已经知道如何管理动态调度的作业,但正在寻求如何分割它们的建议。
    • 我在答案中添加了更多信息,可以帮助您进一步了解这些方面。
    猜你喜欢
    • 1970-01-01
    • 2011-05-01
    • 2012-08-09
    • 2016-08-07
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多