Spring Boot:如何为JPA停用所有缓存?

时间:2017-03-10 16:17:37

标签: java hibernate jpa spring-boot spring-data

我有一个spring boot应用程序,其中主类使用@SpringBootApplication进行注释。

我已连接到MySQL数据库。

我想停用 所有 基于JPA / Hibernate的缓存。

目前,根据启动消息,我可以找到很多自动配置的缓存。如何关闭缓存?

以下是启动消息的摘录 - 仅针对引人注目的cach进行过滤:

Positive matches:
-----------------
   GenericCacheConfiguration matched
      - Automatic cache type (CacheCondition)

   NoOpCacheConfiguration matched
      - Automatic cache type (CacheCondition)

   RedisCacheConfiguration matched
      - Automatic cache type (CacheCondition)

   SimpleCacheConfiguration matched
      - Automatic cache type (CacheCondition)

2 个答案:

答案 0 :(得分:1)

如果您不希望Spring Boot自动配置这些配置,那么您可以使用@EnableAutoConfiguration注释来完成此操作。

@EnableAutoConfiguration(exclude={
  GenericCacheConfiguration.class,
  NoOpCacheConfiguration.class,
  RedisCacheConfiguration.class,
  SimpleCacheConfiguration.class
})

但请注意,即使应用程序的某些部分需要并使用上面列出的这些自动配置提供的任何缓存子系统,也不会影响Hibernate。

从spring文档中,当类路径中存在任何缓存提供程序时,Spring不会专门启用任何Hibernate 2LC功能。所以这意味着Hibernate中2LC的默认行为保持不变,例如您必须自己专门启用它才能使用

答案 1 :(得分:1)

不用担心,配置类GenericCacheConfigurationNoOpCacheConfigurationRedisCacheConfigurationSimpleCacheConfiguration实际上并未激活。您看到的调试信息是误报。

它们未被激活,因为它们的根自动配置类CacheAutoConfigure(引用它们)与其条件不匹配。实际上,GenericCacheConfigurationRedisCacheConfigurationSimpleCacheConfiguration与bean存在(ConfigurationPhase.REGISTER_BEAN)的第二轮匹配不匹配,即使它们的根自动配置类实际上已经存在激活。

如果您仍然坚持完全排除上述类,实际上您不能直接排除它们,因为它们是 package-local (不是public)。解决方案是排除其根自动配置类:

@EnableAutoConfiguration(exclude=CacheAutoConfigure.class)