java - Spring boot应用程序启动时如何缓存数据

标签 java spring spring-boot caching ehcache

我有一个连接到 SQL Server 数据库的 Spring boot 应用程序。我需要一些帮助来在我的应用程序中使用缓存。我有一个 CodeCategory 表,其中包含许多代码的代码列表。该表将每月加载一次,并且数据每月仅更改一次。 我想在应用程序启动时缓存整个表。在对该表的任何后续调用中,都应该从此缓存中获取值,而不是调用数据库。

例如,

List<CodeCategory> findAll();

我想在应用程序启动期间缓存上述数据库查询值。如果有像 List<CodeCategory> findByCodeValue(String code) 这样的数据库调用应该从已经缓存的数据中获取代码结果,而不是调用数据库。

请告诉我如何使用 Spring Boot 和 ehcache 来实现这一点。

最佳答案

正如所指出的,ehcache 需要一些时间来设置,并且它不能完全与 @PostConstruct 一起工作。在这种情况下,请使用 ApplicationStartedEvent 加载缓存。

GitHub 存储库:spring-ehcache-demo


@Service
class CodeCategoryService{

   @EventListener(classes = ApplicationStartedEvent.class )
   public void listenToStart(ApplicationStartedEvent event) {
        this.repo.findByCodeValue("100");
   }

}

interface CodeCategoryRepository extends JpaRepository<CodeCategory, Long>{

    @Cacheable(value = "codeValues")
    List<CodeCategory> findByCodeValue(String code);
}


注意:正如其他人指出的那样,有多种方法。您可以根据您的需要进行选择。

关于java - Spring boot应用程序启动时如何缓存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56471247/

相关文章:

java - 是否可以通过 Firebase 托管托管 Java Spring 应用程序?

java - @RequestMapping 注解中路径和值属性的区别

java - Spring Boot 开发者工具自动重启在 IntelliJ 中不起作用

Java G1 GC : Programmatically finding the number of humongous regions before/after GC

java - 如何制作可移动且可调整大小的 Canvas 绘制Android?

java - 如何将 ArrayList/lists/iterables 参数传递给 JSF1.2 自定义组件

java - 如何使用 servlet 过滤器拦截其他应用程序的请求?

java - 修剪字符串中的多个字符

java虚拟机崩溃

java - 根据RequestBody中的key区分Spring Boot PostMapping