将 Ehcache 与 Spring MVC 和 Hibernate 应用程序集成

Integrate Ehcache with Spring MVC and Hibernate Application

我正在开发一个 java 应用程序,该应用程序正在使用 Java (JDK 1.8)、Spring MVC(Restful Web 服务开发Layer) 4.x、Hibernate 5.x、MYSQL Db 和 Tomcat Server 8。一切都在 java 配置中以编程方式配置,没有 XML配置文件。我需要为休眠配置二级缓存。我计划将 EhCache 与应用程序集成。

  1. 这可以通过 Java 配置(没有 EhCache.xml 文件)实现吗?
  2. 另一个问题是 spring 缓存和休眠二级缓存有什么区别?

关于以编程方式将 Ehcache 配置为 Hibernate 二级缓存,不,当您使用 Ehcache 2.x 和 net.sf.ehcache.hibernate.EhCacheRegionFactory 时,这是不可能开箱即用的。您将必须扩展工厂 class 并使其配置 CacheManager 以供使用。

对于带有 JCache 的 Hibernate 5.2,使用 Ehcache 3.x 作为提供程序,有一个更简单的方法:确保首先配置 JCache CacheManager,然后让 Hibernate 使用配置的那个。作为替代方案,您可以扩展 org.hibernate.cache.jcache.JCacheRegionFactory 并改编 CacheManagerCache 作品。 following sample 可以帮你弄明白。

关于第二点:

Spring caching 是一个通用抽象,可用于应用程序的所有层,您可以在其中决定缓存什么,从哪个调用等...

Hibernate second level cache 是位于对象模型和数据库访问之间的专用缓存。你告诉框架用什么语义缓存什么,但是实际的工作对你是隐藏的。

您当然可以将两者结合在一个应用程序中,您可以在其中缓存更高级别的结果,例如使用 Spring 缓存的服务调用结果或网页以及使用 Hibernate 2LC 的实体/查询结果。虽然我建议使用不同的 Cache 来很好地分离它们的内容和生命周期。