使用 Spring 在整个应用程序中保存数据的最佳实践

Best practice holding data over whole application with Spring

我们引入了 Spring Boot 和 Spring Data JPA。在旧世界中,我们有一个用于保存需要整个应用程序(国家列表等)的数据的单例。数据存储在我们的数据库中。 使用 Spring 在我们的新世界中重构它的最佳实践是什么? 我应该创建一个具有应用程序范围的 bean 还是现在使用缓存处理它的最佳实践 (@Cacheable)?

我建议将数据保存在数据库中,但使用 caffeine or Google Guava 等流行的内存缓存库对其进行缓存。这些库允许您快速配置一个内存缓存,可以偶尔刷新一次数据(每 15 分钟;每小时;每天;任何您想要的)。您的程序代码可以根据需要多次访问缓存,它总是很快的。该库具有定期更新缓存的逻辑。

如果您的数据特别静态,比如您可能每隔一段时间就更改一次的应用程序配置 months/years,您也可以考虑将其移至静态配置文件。 Spring Boot 有 a wide variety nifty features built-in for loading external config (JSON or YAML) and binding it to a Java-based object model. I find the @ConfigurationProperties 注释特别有用。外部配置可以打包在 fat-jar 中,也可以通过 Spring 配置服务器从外部加载。这种方法的主要优点是您的配置将存储在您的版本控制系统中 (GIT)。您还可以对您的配置执行启动时验证,这可能会发现错误,否则这些错误会在您的服务运行时显示出来。最后,您的配置不再依赖于数据库。

两种方法都可以。我更喜欢 @Cacheable,因为它可以用更少的代码来执行诸如条件缓存和驱逐之类的操作,这些操作很容易获得。