首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将cache2k与hibernate集成

如何将cache2k与hibernate集成
EN

Stack Overflow用户
提问于 2018-01-27 00:30:53
回答 1查看 505关注 0票数 1

如何像hibernate缓存提供程序那样集成cache2k?

我的意思是,在当前项目中,我们使用ehcache,并在下一个配置hibernate.cfg.xml中启用缓存:

代码语言:javascript
复制
<hibernate-configuration>

    <session-factory>

        <!-- Cache Configurations -->
        <!-- Using net.sf.ehcache.hibernate.SingletonEhCacheProvider instead of
             net.sf.ehcache.hibernate.EhCacheProvider ensures the same instance
             of CacheManager is referred to by both Hibernate and our JMX Agent
             simpleJpaHibernateApp.agents.jmxAgent.   -->
        <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</property>
        <!--  <property name="hibernate.cache.provider_configuration">/ehcache.cfg.xml</property> -->
        <property name="hibernate.cache.use_minimal_puts">false</property>
        <property name="hibernate.cache.use_query_cache">true</property>
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <property name="hibernate.cache.use_structured_entries">true</property>
</session-factory>

同样,我们使用Cache管理器类:

代码语言:javascript
复制
public class AppCacheManager {

private static final Logger log = LoggerFactory.getLogger(AppCacheManager.class);

private static CacheManager manager;

@SuppressWarnings("unused")
private static AppCacheManager INSTANCE = new AppCacheManager(); 


private AppCacheManager() {
    manager = CacheManager.getInstance();

    MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
    ManagementService.registerMBeans(manager, mBeanServer, true, true, true, true);

    if (log.isInfoEnabled()) {
        log.info("Cache Manager was initialized.");
        log.info("Cache Regions Detected:");

        String[] cacheNames = manager.getCacheNames();
        for (String cacheName : cacheNames) {
            log.info("   " + cacheName);
        }
        log.info("Cache disk store path: " + manager.getDiskStorePath());
    }
}

我能用一些cache2k实现替换hibernate配置中的net.sf.ehcache.hibernate.SingletonEhCacheProvider吗?

如何在cache2k的基础上采用AppCacheManager?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-08 18:28:19

您可以在hibernate中使用cache2k,而不需要任何额外的代码。

您需要在项目中添加以下依赖项:

代码语言:javascript
复制
<dependency>
  <groupId>org.cache2k</groupId>
  <artifactId>cache2k-all</artifactId>
  <version>${cache2k-version}</version>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.cache2k</groupId>
  <artifactId>cache2k-jcache</artifactId>
  <version>${cache2k-version}</version>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>javax.cache</groupId>
  <artifactId>cache-api</artifactId>
  <version>1.1.0</version>
</dependency>

hibernate配置需要包含:

代码语言:javascript
复制
<hibernate-configuration>
  <session-factory>
    <property name="cache.region.factory_class">org.hibernate.cache.jcache.JCacheRegionFactory</property>
    <property name="hibernate.javax.cache.provider">org.cache2k.jcache.provider.JCacheProvider</property>
    <property name="hibernate.javax.cache.uri">hibernate</property>
    <!-- .... rest of configuration .... -->
  </session-factory>
</hibernate-configuration>

然后,您可以将文件cache2k-hibernate.xml添加到类路径中,以便进一步配置缓存,例如:

代码语言:javascript
复制
<cache2k>
  <version>1.0</version>
  <!-- if enabled cache2k does not refuse operation in case there is
       no configuration for a requested cache name -->
  <ignoreMissingCacheConfiguration>true</ignoreMissingCacheConfiguration>
  <defaults>
    <!-- default settings for every cache -->
    <cache>
      <entryCapacity>100_000</entryCapacity>
    </cache>
  </defaults>
  <caches>
    <!-- reduced size for the query cache -->
    <cache>
      <name>org.hibernate.cache.internal.StandardQueryCache</name>
      <entryCapacity>100</entryCapacity>
    </cache>
  </caches>
</cache2k>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48465538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档