我尝试使用newSingleThreadScheduledExecutor安排执行程序,该执行程序在10天后(从系统初始化后),20天后(从系统初始化后)和每月的第1天发送报告。 我试图使用每天运行的newSingleThreadScheduledExecutor并检查今天是否在10天后... 20天等等。 但是,我认为我们有一种更优雅的方式来解决这个问题。 你知道如何改进我的代码吗?
调度程序:
scheduler.scheduleWithFixedDelay(() -> {
try {
createReport();
} catch (Exception e) {
log.error("Error to create engagement report", e);
}
}, 1, 1, TimeUnit.DAYS);
并在createReport函数上 - 我检查日期。
谢谢!
答案 0 :(得分:0)
最后,我使用在构造函数中初始化的ScheduledExecutorService计划:
scheduler.schedule(createTask , nextDayOfTask, TimeUnit.DAYS);
所以,每当我到达createTask
时 - 我会在下一份报告出来时重新计算并更新时间表。
public Runnable createTask = new Runnable() {
@Override
public void run() {
// Do What Ever You Need
scheduler.schedule(this, nextDayOfTask, TimeUnit.DAYS);
}
};