2017-09-16 4 views
0

Je reçois l'exception ci-dessous lors de l'exécution de l'application de démarrage Rest Spring. J'ai le fichier application.properties et ehcache.xml dans le répertoire config.Erreur lors de l'implémentation de la mise en cache de second niveau dans l'application de démarrage Rest Spring

application.properties

#Second level caching 
hibernate.cache.use_second_level_cache=true 
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory 

logging.level.org.hibernate.SQL=DEBUG 
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE 

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 
    <defaultCache eternal="true" maxElementsInMemory="1000" overflowToDisk="false"/> 
    <cache name="simpleCache" maxElementsInMemory="100" eternal="true" overflowToDisk="false" /> 
</ehcache> 

Classe Entité: -

import org.hibernate.annotations.CacheConcurrencyStrategy; 
import javax.persistence.Column; 
import java.util.Date; 
import javax.persistence.Cacheable; 
import javax.persistence.Table; 
import javax.persistence.Id; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Index; 
import javax.persistence.Entity; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 
import org.hibernate.annotations.Cache; 
import org.hibernate.annotations.CacheConcurrencyStrategy; 

@Entity 
@Cacheable 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "simpleCache") 

build.gradle

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-actuator') 
    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    runtime('org.springframework.boot:spring-boot-devtools') 
    // https://mvnrepository.com/artifact/org.hibernate/hibernate-ehcache 
    compile group: 'org.hibernate', name: 'hibernate-ehcache', version: '4.0.1.Final' 
    // https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core 
    compile group: 'net.sf.ehcache', name: 'ehcache-core', version: '2.5.0' 
    runtime('org.postgresql:postgresql') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

Je ne reçois pas une erreur si je supprime la "@Cache ligne" dans l'entité et de changer "@Cacheable" à "@Cacheable (true)". Mais dans ce cas, chaque fois que je reçois les données d'entité un changement de la base de données. La requête est en cours de lancement.

Toute aide sera grandement appréciée!

Répondre

0

Votre cache ne semble pas être utilisé par Hibernate.

Je suis un peu surpris par les anciennes versions de mise en veille prolongée ehcache et que vous utilisez:

compile group: 'org.hibernate', name: 'hibernate-ehcache', version: '4.0.1.Final' 
compile group: 'net.sf.ehcache', name: 'ehcache-core', version: '2.5.0' 

Latest Spring boot defines ces versions:

<ehcache3.version>3.2.2</ehcache3.version> 
<hibernate.version>5.0.12.Final</hibernate.version> 

Quoi qu'il en soit, ce que je vous suggère de le faire , est d'embrasser ces versions de démarrage de printemps, en utilisant le démarrage de printemps et hibernate jsr-107 (jcache) soutien pour les coller à ehcache3 (vous aurez besoin de update your ehcache.xml to the latest version)

Je vous suggère de jeter un oeil à this simple spring boot app using ehcache3 et quand vous vous sentez plus familier avec spring boot et ehcache/jsr-107, passez à a full fledged jhipster/spring boot/hibernate/ehcache app source code.

0

Anthony a absolument raison. Cela dit, je pense que votre problème direct est que la propriété devrait être spring.jpa.properties.hibernate.cache.region.factory_class et spring.jpa.properties.hibernate.cache.use_query_cache=true.