我已弃用方法Scheduler.addPeriodicJob。我想重构我的代码并替换它 Scheduler.schedule如何使用ScheduleOptions接口以及如何通过它传递值?
答案 0 :(得分:4)
看看this page。 看起来您需要替换每个调用,如:
Scheduler s;
s.addPeriodicJob(name, job, config, period, canRunConcurrently);
类似
Scheduler s;
ScheduleOptions so = Scheduler.NOW(times, period); // times == -1 for endless
so.canRunConcurrently(canRunConcurrently);
so.config(config);
so.name(name);
s.schedule(job, so);
答案 1 :(得分:2)
如果您有很多修复引用,则应使用此解决方案。
您可以在代码库中创建一个类org.apache.sling.commons.scheduler.Scheduler
并声明旧方法和新方法:
public class Scheduler {
@Deprecated
public void addPeriodicJob(String name,
Object job,
Map<String,Serializable> config,
long period,
boolean canRunConcurrently)
throws Exception {
ScheduleOptions options = NOW(-1, period)
.name(name)
.config(config)
.canRunConcurrently(canRunConcurrently);
schedule(job, options);
}
public boolean schedule(Object job, ScheduleOptions options) {
// dummy placeholder to let the code compile
return false;
}
}
(您可能需要实现编译代码所需的Scheduler
接口的所有方法,并让重构按预期工作)
然后,使用IDE的重构工具内联addPeriodicJob()
方法。
最后,删除您在代码库中创建的Scheduler
类。
你的所有代码都应该已经迁移了!
你终于有一个清理步骤,你 必须 (我不能强调这一点):
然后你应该删除所有不必要的代码或默认值。
例如,我的测试样本:
public static void main(String[] args) {
Scheduler scheduler = new Scheduler();
scheduler.addPeriodicJob("name", new Object(), Collections.EMPTY_MAP, 10, false);
}
这样结束:
public static void main(String[] args) {
Scheduler scheduler = new Scheduler();
ScheduleOptions options = scheduler.NOW(-1, (long) 10).name("name").config((Map<String, Serializable>) Collections.EMPTY_MAP).canRunConcurrently(false);
scheduler.schedule(new Object(), options);
}
你可以做一些重新格式化和清理到此结束:
public static void main(String[] args) {
Scheduler scheduler = new Scheduler();
ScheduleOptions options = scheduler
.NOW(-1, 10)
.name("name")
.config(Collections.EMPTY_MAP)
.canRunConcurrently(false);
scheduler.schedule(new Object(), options);
}
如果您删除了设置默认值或无意义值的代码,您甚至可以最终得到(我想,因为我对吊索一无所知):
public static void main(String[] args) {
Scheduler scheduler = new Scheduler();
scheduler.schedule(new Object(), scheduler.NOW(-1, 10));
}