【问题标题】:Quartz scheduler - Different jobs using same class?石英调度器 - 使用同一类的不同作业?
【发布时间】:2015-01-05 17:32:45
【问题描述】:

Quarts 示例通常这样做:

JobDetail job = newJob(PrintMessageJob.class)

如何创建一个在运行时定义了参数的作业?这样的事情会很好,但不允许:

JobDetail job = newJob( new PrintMessageJob("my message") );

谢谢

【问题讨论】:

    标签: java quartz-scheduler


    【解决方案1】:

    你必须做的是以下。

    JobDetail job = newJob(PrintMessageJob.class)
                   .usingJobData("message", "my message")
                   .build();
    
    public class PrintMessageJob implements Job {
    
        public PrintMessageJob() {
        }
    
        public void execute(JobExecutionContext context) throws JobExecutionException
        {
            JobDataMap dataMap = context.getJobDetail().getJobDataMap();
    
            String message = dataMap.getString("message");
            ...
        }
    }
    

    【讨论】:

    • 谢谢,这很有帮助。但是,如果我的作业需要对某些对象的实例进行操作怎么办?我想做 usingJobData("myThing", this) 但只有不可变(字符串、双精度等)可以在该映射中传递。
    • 我想我可以将需要操作的所有对象添加到静态哈希映射中,然后在创建作业对象时传入密钥,以便在作业运行时获取对实例的引用操作。这也不是很好。
    • 只有当您放入 hashmap 的哈希和对象是不可变的时,您才应该这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多