Spring @Scheduled每天凌晨4:00到4:30之间的随机时间开始

时间:2016-12-07 11:35:44

标签: spring cron

如问题标题所述,我需要设置Spring Scheduler,它将运行方法将数据库中的内容加载到内存中,每天凌晨4点左右

问题是我有这个服务器的多个实例,我不想让所有人同时开始执行,因为它会减慢数据库的速度。所以我希望时间在凌晨4:00到凌晨4:30之间的某个时间点。

假设一个实例每天凌晨4:03开始,另一个实例在凌晨4:09开始,第三个在凌晨4:21等。查询的执行持续1分钟。

这可能与cron表达式有关,但是没有使用$ RANDOM bash(因为我认为我没有它),或者我可能需要以其他方式注入此随机值

@Scheduled(cron="* randomMinuteValue 4 * * *")

2 个答案:

答案 0 :(得分:5)

使用Spring的 RandomValuePropertySource

@Scheduled(cron='0 ${random.int[0,30]} 4 * * ?')

答案 1 :(得分:1)

如果你有java 8而不是spring boot,你可以尝试以下方法:

@Scheduled(cron = "0 #{new java.util.Random().nextInt(30)} 4 * * ?")