Java SpringBoot:如何停用JPA的所有缓存?

Java SpringBoot:如何停用JPA的所有缓存?,java,hibernate,jpa,spring-boot,spring-data,Java,Hibernate,Jpa,Spring Boot,Spring Data,我有一个SpringBoot应用程序,其中主类用@SpringBootApplication注释 我连接到一个MySQL数据库 我想停用所有基于JPA/Hibernate的缓存 目前,根据启动消息,我可以发现许多自动配置的缓存已启用。如何关闭缓存 以下是启动消息的摘录-仅为eyecatchercach过滤: Positive matches: ----------------- GenericCacheConfiguration matched - Automatic cach

我有一个SpringBoot应用程序,其中主类用
@SpringBootApplication
注释

我连接到一个MySQL数据库

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

目前,根据启动消息,我可以发现许多自动配置的缓存已启用。如何关闭缓存

以下是启动消息的摘录-仅为eyecatcher
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)

如果您不希望通过Spring Boot自动配置这些配置,那么您可以在这里使用
@EnableAutoConfiguration
注释来完成这一点

@EnableAutoConfiguration(exclude={
  GenericCacheConfiguration.class,
  NoOpCacheConfiguration.class,
  RedisCacheConfiguration.class,
  SimpleCacheConfiguration.class
})
但是请注意,即使应用程序的某些部分需要并使用上面列出的这些自动配置提供的任何缓存子系统,这对Hibernate没有影响


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

不用担心,配置类
GenericCacheConfiguration
NoOpCacheConfiguration
RedisCacheConfiguration
SimpleCacheConfiguration
实际上没有激活。您看到的调试信息为假阳性

它们未被激活,因为它们的根自动配置类
CacheAutoConfigure
(引用它们的)与其条件不匹配。事实上,
genericacheconfiguration
RedisCacheConfiguration
SimpleCacheConfiguration
将不匹配bean存在的第二轮匹配(
ConfigurationPhase.REGISTER\u bean
),即使它们的根自动配置类实际上已被激活

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

@EnableAutoConfiguration(exclude=CacheAutoConfigure.class)

无法在JPA中关闭一级缓存。您可以使用属性“javax.persistence.sharedCache.mode”将二级缓存配置为关闭。除此之外,一切都取决于JPA提供程序的具体情况。我尝试通过
import org.springframework.boot.autoconfigure.cache.*导入提到的类,但我得到一个编译错误,因为它们不是公共的。我怎样才能解决这个问题?