observer模式和springboot@service

fcipmucu  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(359)

有人能帮我处理observer模式和springboot@service吗?
假设我有课:

WeatherStation[temperature, humidity, windSpeed ...] - subject (observable)

我可以有很多这样的类,我需要更新数据库中的数据,所以当温度变化时,我需要在正确的气象站下将其记录到数据库中。
我有三个解决方案,第一个是:
创建类weatherstationobserver,它将引用weatherstationrepository,我将为一个weatherstation注册一个weatherstationobserver,weatherstationobserver将数据保存到数据库中(这与我现在实现它的方式类似),但有一些缺陷。例如,我不能@autowire到weatherstationobserver,也不能使方法@transactional。。。
第二个想法是:
创建将从weatherstationobserver调用的WeatherStationUpdate服务。我不喜欢这样,因为weatherstationobserver在这里服务只是调用weatherstationupdateservice。
第三个想法:
让服务成为一个观察者,并为每个气象站注册,但我不确定服务是否不应该只从外部调用,以及作为观察者是否是一个好的实践服务。
有人能帮我吗?

62lalag4

62lalag41#

将气象站及其相应的ID存储在数据库中。
两边各有一个“上次投票时间”。
有一个 @Scheduled and @Transactional 一个任务,它从最近(x秒内)没有轮询过的20个站点中提取一个页面,并查询它们的数据,对其进行处理并将其持久化,更新每个站点的“上次轮询时间”。
如果您必须将它们放在一起,那么请执行opc-ua数据获取,当每个数据都返回时,只需将数据放在队列(例如activemq)上,然后创建一个 @JmsListener 这将处理该队列,一次进行持久化(以避免对数据库造成严重影响)。

相关问题