【发布时间】:2019-01-05 22:41:04
【问题描述】:
我有一个 Spring Boot 应用程序,它使用 @Scheduled 每 500μs 获取数据库中的数据。我的一个朋友劝阻我说这是一种渎职行为。这是我的示例代码:
@Scheduled(fixedRate = 500)
@Override
public void sync() {
departments.setAll((Collection<? extends Department>) departmentRepository.findAll());
sections.setAll((Collection<? extends Section>) sectionRepository.findAll());
positions.setAll((Collection<? extends Position>) positionRepository.findAll());
}
我的应用程序运行良好,但我唯一担心的是天气不好,这是一个好习惯吗?有什么好处和坏处?
【问题讨论】:
-
我没有看到任何优点。只有缺点。你为什么要这样做?
-
是的,应用程序必须提取更新的部门列表等。只要需要一个。无需后台任务强制每分钟 120 次完全刷新所有列表。
-
您正在尝试编写基于非推送后端的推送系统。因此,要么 1)解决此限制,要么 2)更改后端。第一个解决方案需要另一个通知通道,例如直写缓存或 Gossip。第二种解决方案需要将数据库更改为支持更改推送通知的数据库。
-
@Glains 这不是卡夫卡问题?持久性是为了什么?我真的希望人们不要再为每一个问题推荐酷新事物。
-
RabbitMQ 可用于发布/订阅模型,其中计算机 B 订阅主题。计算机 A 将在新数据到达时发布 DataUpdatedEvent。可选地,增量可以通过 RabbitMQ 本身传输,因此可能根本不需要同步作业。 rabbitmq.com/getstarted.html 这真的取决于很多因素:变化的频率、变化的数量等。
标签: java mysql spring-boot jdbc