为Spring Boot应用程序存储值的最佳实践是什么?

时间:2019-10-31 09:15:41

标签: java spring spring-boot

我有一个使用Spring Boot构建的简单微服务。它包含一个计划任务,我需要保留下一个计划任务的上一个计划任务日期。由于该服务将由于更新或任何意外原因而停止,请告知在本地存储此值的最佳实践是什么?谢谢

4 个答案:

答案 0 :(得分:10)

有几种可能的解决方案:

  • 写入文件(如果可以写入文件系统)
  • 写入数据库(如果使用的话)
  • 向另一个微服务发出HTTP请求,该请求将保留您的最后一条记录

答案 1 :(得分:0)

由于该应用程序将部署在AWS上,因此您可以使用Systems Manager Parameter Store。您可以指定键值对并在每次成功的计划更新中更新值。这样,即使终止了部署了应用程序的EC2实例,这些键值对也不会受到影响。

您还可以使用S3存储桶并将其写入文件中。

答案 2 :(得分:0)

有许多方法可以存储应用程序数据,但是选择归结为您希望解决方案的灵活性。与您的用例类似,Spring Batch Admin(现已停产)正在使用MySql DB。这样就可以跟踪已处理的记录,并可以从最后一点继续处理。

将数据写入一个文件可以很容易,该文件可以帮助您识别已处理的最后一条记录,或者将其存储在Redis,MySql或MongoDB等数据存储中。

因此,如果您没有正在使用的任何数据库,那么如果您已经在使用某种类型的数据存储(例如MySql,MongoDB或Redis),则将最后处理的记录的标识符存储到文件中就可以解决问题。

当数据存储从特定于应用程序的逻辑或格式中抽象出来并且可以在需要时在外部进行查询和/或修改时,将数据存储到该数据存储中会更好。这使该解决方案具有更强的可修改性,因为它不受应用程序的约束。

答案 3 :(得分:0)

您应该避免将您查找最多的任何数据保存在文件系统上。如果有数百个并发读取,这将减慢您的应用程序的速度。尝试依赖持久性缓存。

  • 对于所有读取,第一个首选项都应该在内存中。您可以异步写入内存和持久性缓存。如果应用程序出现故障,则应使用为此目的而构建的其他高性能缓存。重新启动时,请从持久性缓存中重新加载内存中的缓存。

  • 持久性缓存,例如:Elasticsearch,Redis。这将提高您的应用程序性能,并具有更大的可扩展性。