【问题标题】:Load data from Database once and available all the time using spring and show in JSP使用spring从数据库一次加载数据并始终可用并在JSP中显示
【发布时间】:2021-03-19 21:26:57
【问题描述】:
我想立即从数据库加载下拉数据并设置在 java 对象中并绑定到我的视图(JSP 页面),并且使用 spring mvc 和 jsp 页面始终可用于该特定控制器或功能。
我不想在应用程序启动时加载,因为我们的应用程序很大,而且每个功能都是独立的。
如果我在应用程序启动时加载,启动应用程序需要很长时间
有没有办法使用spring mvc模式和使用JSP
有人能告诉我怎么做吗
【问题讨论】:
标签:
spring
spring-mvc
jsp
【解决方案1】:
正如您没有提到您执行数据库操作的频率或获取数据的频率。考虑到普通用户。
方法:创建自己的本地缓存/程序缓存实现。
- 不要在启动期间从数据库中加载所有数据,而是仅加载对所有人通用的主数据。如果主数据也很高,那么您可以执行延迟加载方法。
- 首次请求时加载特定功能的数据。将数据保存在本地缓存中。
- 每当有人进行更改时,将数据添加到缓存中并将其保存到数据库中。因此,您将始终在缓存中保存最新数据。
优势:
- 对于通用或静态主数据非常有用
-如果您需要一些通用数据的良好业务逻辑。这种方式只有在您处理数据并保留缓存时才使用。
- 获取数据非常快,因为它除了第一次之外不涉及数据库请求
缺点:
- 如果您有非常多的用户和非常高的更新操作,那么更新缓存将延迟更新过程,因为您需要按顺序更新它。
我建议您可以使用多种方法来提高代码质量和处理能力。
【解决方案2】:
这听起来像是典型的缓存功能。
Spring 在应用程序级别支持caching out of the box by @EnableCaching 和在存储库方法上支持@Cacheable(“cachename”) 检索您的下拉数据。在您的简单用例中,您甚至不需要额外的框架,因为有一个基于 ConcurrentHashMap 的 CacheManager 可以永久缓存。
使用缓存,您的控制器可以简单地从存储库中获取下拉数据。缓存将确保只有第一个调用会真正从数据库中获取,并将结果保存在内存中以供所有即将到来的调用使用。
如果您需要更复杂的缓存,您只需更换缓存管理器并根据需要配置缓存。