Spring:hibernate + ehcache

Joh*_*erg 9 java spring caching hibernate ehcache

我正在使用一个使用hibernate的spring项目,并期望使用ehcache实现二级缓存.我看到了很多方法:

  1. spring-modules-cache它引入了@Cacheable注释

  2. ehcache-spring-annotations一个旨在成为其继承者的工具集spring-modules-cache.

  3. Hibernate cache很好地集成到hibernate本身,以使用例如@Cache注释执行缓存.

  4. Programmatic cache使用代理.基于注释的配置很快变得有限或复杂(例如,几个级别的注释嵌套)

我个人认为spring-modules-cache不够彻底,因此我可能更愿意考虑更积极的发展ehcache-spring-annotations.Hibernate cache虽然似乎是最完整的实现(例如,读取和写入缓存等).

什么会激发使用哪个工具集?请分享您的缓存体验......

Der*_*har 9

我们的项目采用选项3.我们应用注释org.hibernate.annotations.Cache到,我们在高速缓存的实体的Ehcache,配置了Ehcache使用ehcache.xml,并启用和配置Hibernate的二级缓存hibernate.cfg.xml:

    <!-- Enable the second-level cache  -->
    <property name="hibernate.cache.provider_class">
        net.sf.ehcache.hibernate.EhCacheProvider
    </property>
    <property name="hibernate.cache.region.factory_class">
        net.sf.ehcache.hibernate.EhCacheRegionFactory
    </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>     
    <property name="hibernate.cache.generate_statistics">true</property>
Run Code Online (Sandbox Code Playgroud)

对于大多数实体,我们使用缓存并发策略CacheConcurrencyStrategy.TRANSACTIONAL:

@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
Run Code Online (Sandbox Code Playgroud)

我们的Maven项目使用Hibernate 3.3.2GA和Ehcache 2.2.0:

    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.3.0.ga</version>
        <exclusions>
            <exclusion>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.2.1.ga</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>ejb3-persistence</artifactId>
        <version>3.3.2.Beta1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)