Spring 弹簧&x2B;Hibernate-启用二级缓存
我正在使用Spring+JPA+Hibernate。我正在尝试启用Hibernate的二级缓存。 我的实体用Spring 弹簧&x2B;Hibernate-启用二级缓存,spring,hibernate,Spring,Hibernate,我正在使用Spring+JPA+Hibernate。我正在尝试启用Hibernate的二级缓存。 我的实体用@javax.persistence.Cacheable&&&@org.hibernate.annotations.Cache(用法=cacheconcurrencysttrategy.READ_ONLY)注释 用@Configuration和@EnableTransactionManagement注释的我的类配置包含以下内容: @Bean public LocalSessionF
@javax.persistence.Cacheable
&&&@org.hibernate.annotations.Cache(用法=cacheconcurrencysttrategy.READ_ONLY)
注释
用@Configuration
和@EnableTransactionManagement
注释的我的类配置包含以下内容:
@Bean
public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setPackagesToScan(new String[] { "fr.pasteur.gaip.dal.*" });
sessionFactory.setHibernateProperties(additionalProperties());
return sessionFactory;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty(Environment.FORMAT_SQL, "true");
properties.setProperty(Environment.SHOW_SQL, showSql);
properties.setProperty(Environment.DIALECT, dialect);
properties.setProperty(Environment.USE_QUERY_CACHE, "true");
properties.setProperty(Environment.USE_SECOND_LEVEL_CACHE, "true");
properties.setProperty(Environment.GENERATE_STATISTICS, "true");
properties.setProperty(Environment.JPA_SHARED_CACHE_MODE, "ALL");
// properties.setProperty(Environment.CACHE_REGION_FACTORY, "org.hibernate.cache.ehcache.EhCacheRegionFactory");
properties.put(Environment.CACHE_REGION_FACTORY, JCacheRegionFactory.class.getName());
properties.put("hibernate.javax.cache.provider", EhcacheCachingProvider.class.getName());
properties.put(Environment.CACHE_PROVIDER_CONFIG, "cache/jcache.xml");
// properties.put("net.sf.ehcache.configurationResourceName", "cache/ehcache.xml");
return properties;
}
这是我的jcache.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.ehcache.org/v3"
xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
xsi:schemaLocation="
http://www.ehcache.org/v3
http://www.ehcache.org/schema/ehcache-core.xsd
http://www.ehcache.org/v3/jsr107
http://www.ehcache.org/schema/ehcache-107-ext.xsd">
<service>
<jsr107:defaults enable-management="true" enable-statistics="true" default-template="default" >
</jsr107:defaults>
</service>
<cache alias="default-query-results-region">
<expiry>
<tti>3000</tti>
</expiry>
<heap>2048</heap>
</cache>
<cache alias="default-update-timestamps-region">
<expiry>
<none />
</expiry>
<heap>4096</heap>
</cache>
<cache alias="USER" uses-template="default">
<expiry>
<tti>3000</tti>
</expiry>
<heap>2048</heap>
</cache>
<cache-template name="default">
<expiry>
<tti>3000</tti>
</expiry>
<heap>2048</heap>
</cache-template>
</config>
3000
2048
4096
3000
2048
3000
2048
我使用了Ehcache和JCache,因此在我的pom中我有:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${lib.hibernate-core.version}</version>
</dependency>
<!--<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${lib.hibernate-core.version}</version>
</dependency>-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jcache</artifactId>
<version>${lib.hibernate-core.version}</version>
</dependency>
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.9.2</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.1.1</version>
</dependency>
org.hibernate
冬眠核心
${lib.hibernate core.version}
org.hibernate
冬眠
${lib.hibernate core.version}
org.ehcache
ehcache
3.8.1
net.sf.ehcache
ehcache
2.10.9.2
javax.cache
缓存api
1.1.1
我使用的是SpringMVC4.3.12.RELEASE和Hibernate5.4.12.Final
但是像sessionFactory.getCurrentSession().createQuery(query).getResultList()
这样的查询仍在触发DB查询,而不是使用缓存数据
你知道少了什么吗