2017-11-11 384 views
0

我最近從1.4升級到1.5.7的彈簧引導1.5.7,並發現Ehcache已從2.x升級到3.x。配置已全部改變。現在我無法設置緩存配置。使用彈簧引導設置Ehcahe 3時出錯1.5

我試過在Ehcache官方blog上的步驟,但沒有成功。

這裏是我的ehcache-dev.xml

<config 
     xmlns='http://www.ehcache.org/v3' 
     xmlns:jcache='http://www.ehcache.org/v3/jsr107'> 

    <service> 
     <jcache:defaults> 

      <jcache:cache name="categoryCache" template="catalog-cache"/> 
      <jcache:cache name="cfCategoryCache" template="catalog-cache"/> 

      <jcache:cache name="ebooks" template="other-cache"/> 
      <jcache:cache name="userNameToken" template="other-cache"/> 

     </jcache:defaults> 
    </service> 

    <cache-template name="catalog-cache"> 
     <heap unit="entries">200</heap> 
     <expiry> 
      <ttl unit="minutes">10</ttl> 
     </expiry> 
    </cache-template> 

    <cache-template name="other-cache"> 
     <!--<listeners>--> 
     <!--<listener>--> 
     <!--<class>org.terracotta.ehcache.EventLogger</class>--> 
     <!--<event-firing-mode>ASYNCHRONOUS</event-firing-mode>--> 
     <!--<event-ordering-mode>UNORDERED</event-ordering-mode>--> 
     <!--<events-to-fire-on>CREATED</events-to-fire-on>--> 
     <!--<events-to-fire-on>UPDATED</events-to-fire-on>--> 
     <!--<events-to-fire-on>EXPIRED</events-to-fire-on>--> 
     <!--<events-to-fire-on>REMOVED</events-to-fire-on>--> 
     <!--<events-to-fire-on>EVICTED</events-to-fire-on>--> 
     <!--</listener>--> 
     <!--</listeners>--> 
     <heap unit="entries">1000</heap> 
     <expiry> 
      <ttl unit="minutes">15</ttl> 
     </expiry> 
    </cache-template> 
</config> 

application-dev.properties文件包含行:

spring.cache.jcache.config=classpath:ehcache-dev.xml

dev曲線運行時,它會產生錯誤:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.cache.CacheManager]: Factory method 'jCacheCacheManager' threw exception; nested exception is javax.cache.CacheException: org.ehcache.xml.exceptions.XmlConfigurationException: Error parsing XML configuration at file:/**********/target/********/WEB-INF/classes/ehcache-dev.xml 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 135 more 
Caused by: javax.cache.CacheException: org.ehcache.xml.exceptions.XmlConfigurationException: Error parsing XML configuration at file:/**********/target/********/WEB-INF/classes/ehcache-dev.xml 
    at org.ehcache.jsr107.EhcacheCachingProvider$ConfigSupplier.getConfiguration(EhcacheCachingProvider.java:327) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:128) 
    at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:79) 
    at org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration.createCacheManager(JCacheCacheConfiguration.java:115) 
    at org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration.jCacheCacheManager(JCacheCacheConfiguration.java:97) 
    at org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration$$EnhancerBySpringCGLIB$$46f8ca07.CGLIB$jCacheCacheManager$1(<generated>) 
    at org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration$$EnhancerBySpringCGLIB$$46f8ca07$$FastClassBySpringCGLIB$$fee1b5ae.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) 
    at org.springframework.boot.autoconfigure.cache.JCacheCacheConfiguration$$EnhancerBySpringCGLIB$$46f8ca07.jCacheCacheManager(<generated>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
    ... 136 more 
Caused by: org.ehcache.xml.exceptions.XmlConfigurationException: Error parsing XML configuration at file:/**********/target/********/WEB-INF/classes/ehcache-dev.xml 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:167) 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:131) 
    at org.ehcache.jsr107.EhcacheCachingProvider$ConfigSupplier.getConfiguration(EhcacheCachingProvider.java:324) 
    ... 150 more 
Caused by: org.xml.sax.SAXParseException; systemId: file:/**********/target/********/WEB-INF/classes/ehcache-dev.xml; lineNumber: 20; columnNumber: 17; cvc-complex-type.2.4.a: Invalid content was found starting with element 'expiry'. One of '{"http://www.ehcache.org/v3":heap-store-settings, "http://www.ehcache.org/v3":disk-store-settings, "http://www.ehcache.org/v3":service-configuration}' is expected. 
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
    at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source) 
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) 
    at org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source) 
    at org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source) 
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source) 
    at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source) 
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) 
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) 
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) 
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) 
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) 
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177) 
    at org.ehcache.xml.ConfigurationParser.<init>(ConfigurationParser.java:165) 
    at org.ehcache.xml.XmlConfiguration.parseConfiguration(XmlConfiguration.java:175) 
    at org.ehcache.xml.XmlConfiguration.<init>(XmlConfiguration.java:163) 
    ... 152 more 

現在,如果我沒有錯,它在cache-template元素內接受expiry元素有問題。但是,情況不應該如此,因爲它明確提到hereA <cache-template> element may contain all the same child elements as a <cache> element.cache元素確實具有expiry元素。

我無法理解我在這裏錯過了什麼。任何幫助讚賞。 TIA

回答

1

顯然,問題是按照元素的順序。 heap元素需要在expiry元素之後。

下面的配置工作好嗎:

<cache-template name="catalog-cache">   
    <expiry> 
     <ttl unit="minutes">10</ttl> 
    </expiry> 
    <heap unit="entries">200</heap> 
</cache-template> 

這是沒有意義的,訂單不應該的問題。已與EhCache提交bug-report