最简单的修复,也许不适合练习
简单的解决方法是在您的方法中添加一个 if 语句,并且仅在当前时间与您想要打印的时间匹配时才打印。
Java 并不总是有最好的时间/日期实现,但从 Java 8 开始,有一个名为的新库LocalDateTime
,它运行良好。我认为使用它是这个简单解决方案的最佳选择。
这是一个LocalDateTime
用于获取当前小时、分钟和秒的示例。年、月、日等也有类似的方法。
LocalDateTime now = LocalDateTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
我们可以将它与您当前的代码结合起来,只在您希望的时候执行 print 语句:
@Configuration
@EnableAsync
@EnableScheduling
public class MyComponent {
@Async
@Scheduled(fixedDelay=5000)
public void doSomething() {
LocalDateTime now = LocalDateTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
if(hour == 10 &&
minute == 34 &&
second < 6) {
System.out.println("Scheduled Task");
}
}
}
您将小时与 10 和分钟与 34 进行比较,因为这些函数返回一个从 0 到 n-1 的数字,其中 n 是一天中的小时数或一小时中的分钟数。您将 second 与 <6 进行比较,因此无论此作业何时开始(因为它每 5 秒执行一次),您始终会在每天上午 11:35 至少打印一次。
我绝对不是在暗示这是最好的选择,但它绝对是一个选择。每 5 秒创建一个新的 LocalDateTime 实例并不理想,但如果资源不是问题,那就没问题了。
这不是最漂亮或设计最好的解决方案,但它确实有效。如果您只想要一个快速的解决方案并且您不关心完成此任务的正确“实践”,这是一个选项。