When/How 我是否以编程方式设置 Hibernate 使用的 Ehcache 大小

When/How do I set Ehcache used by Hibernate size programmatically

我通过添加以下内容在 Hibernate 4.3.11 中启用了二级缓存:

 config.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
 config.setProperty("hibernate.cache.use_second_level_cache", "true");

我的 Hibernate 配置。

这是我的pom.xml(不确定 pom 定义是否有必要如此尴尬)

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-ehcache</artifactId>
      <version>4.3.11.Final</version>
      <exclusions>
          <exclusion>
              <groupId>net.sf.ehcache</groupId>
              <artifactId>ehcache-core</artifactId>
          </exclusion>
      </exclusions>
      </dependency>
      <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache</artifactId>
          <version>2.7.0</version>
      </dependency>

这是 class 我想缓存

@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

但是我如何在创建数据库时在代码中配置缓存大小,使用 Xml 文件对我来说不切实际,它只会增加构建过程的复杂性我更愿意在代码中做.

更新,从 Hibernate 创建数据库后,我发现缓存已经创建

CacheManager.create();
String[] cacheNames = CacheManager.getInstance().getCacheNames();
for(String cacheName:cacheNames)
{
    MainWindow.logger.severe("CacheName:"+cacheName);
    Cache cache = CacheManager.getInstance().getCache(cacheName);
    cache.getCacheConfiguration().setMaxEntriesInCache(1000);
    cache.getCacheConfiguration().setLogging(true);
}

但是我如何影响它们的创建方式或像我所做的那样修改值就足以更新。当我 运行 时,我没有看到任何调试输出或任何表明正在使用缓存的信息。

您可以继承 org.hibernate.cache.ehcache.EhCacheRegionFactory 并手动执行任何缓存配置,然后告诉 Hibernate 使用您的自定义缓存工厂:

Configuration.setProperty("hibernate.cache.region.factory_class", "my.cache.FactoryClass");

参见:http://www.ehcache.org/documentation/2.7/integrations/hibernate.html#set-the-hibernate-cache-provider-programmatically-