【发布时间】:2017-04-22 08:03:36
【问题描述】:
如问题标题中所述,我需要设置 Spring Scheduler 以运行方法以将数据库中的某些内容加载到内存中,每天凌晨 4 点左右
问题是我有这个服务器的多个实例,我不希望所有实例同时开始执行,因为它会减慢数据库。所以我希望时间在凌晨 4:00 到凌晨 4:30 之间的某个随机分钟
假设每天凌晨 4:03 开始一个实例,凌晨 4:09 开始另一个,凌晨 4:21 开始第三个,以此类推。查询的执行持续 1 分钟。
这是否可能与 cron 表达式有关,但不使用 $RANDOM bash(因为我认为我没有它),或者我需要以其他方式将此随机值注入
@Scheduled(cron="* randomMinuteValue 4 * * *")
【问题讨论】:
-
我不会这样做。为什么不同时启动它们并根据数据库连接池中正在使用的连接数来限制它们。
-
我写的错误我有多个服务实例,但我想说的是服务器实例,因此每个服务器都会尝试同时连接到数据库。而且我无法控制另一个服务器实例来限制它们。对不起我写的错误:(@EssexBoy
-
你用的是什么数据库?
-
@EssexBoy mysql
-
我想我找到了一种使用 RandomValuePropertySource 的方法,我可以为给定范围注入任何随机 int,例如 @Scheduled(cron='0 ${random.int[0,30]} 4 * * ?')