有没有办法将BlockingQueue传递给Quartz框架中的作业?我试图使用JobDataMap传递BlockingQueue,但这似乎不起作用。这里是相关的代码片段:
JobDetail job = newJob(Jobby.class)
.withIdentity("myJob", "group1")
.usingJobData("buffer", queue)
.build();
也许有人知道如何实现这一目标。
答案 0 :(得分:1)
看起来你正在尝试实现生产者/消费者设计模式,其中生产者将工作放在队列中,而消费者检查使用Quartz定期排队。此设计不是错误,但您的实现将无法正常工作。通过将该队列传递给作业数据,Quartz将序列化它并在作业触发时将其反序列化。队列不会通过引用传递,而是通过值(复制)传递。如果您意识到Quartz应该在分布式环境中工作,这是可以理解的,其中作业被调度并持久化到一个节点上的数据库,并在其他节点上反序列化并执行。
据说你需要重新评估你的实施。如果您不关心群集和分发,请使您的队列以某种方式全局可用。您的选择是:
我特别建议使用spring,jndi也是不错的选择。但是,如果我们在谈论jndi - 为什么不考虑使用一些轻量级jms实现而不是Quartz?你会避免延迟。