2017-05-24 129 views
2

出于某种原因,我无法将expiry元素添加到ehcache3配置xml中。没有expiry元素的 ,它工作正常。echache3 XML解析问题

<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xmlns='http://www.ehcache.org/v3' 
    xmlns:jsr107='http://www.ehcache.org/v3/jsr107'> 

    <service> 
    <jsr107:defaults> 
     <jsr107:cache name="people" template="heap-cache"/> 
    </jsr107:defaults> 
    </service> 

    <cache-template name="heap-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> 
    <expiry> 
     <ttl unit="seconds">10</ttl> 
    </expiry> 
    <resources> 
     <heap unit="entries">2000</heap> 
     <offheap unit="MB">100</offheap> <!-- unit of measure is case sensitive! --> 
    </resources> 
    </cache-template> 
</config> 

的错误信息是:

org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'expiry'. One of '{"http://www.ehcache.org/v3":heap, "http://www.ehcache.org/v3":resources, "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. 

但看着这个XSD: http://www.ehcache.org/schema/ehcache-core.xsd 我看不出有什么毛病的标签,任何人有任何想法?

回答

2

的Ehcache 3严格执行XSD,所以cachecache-template内的元素必须以下列顺序:

  1. key-type
  2. value-type
  3. expiry
  4. eviction-advisor
  5. loader-writer
  6. listeners
  7. resources OR heap
  8. 更多...

与所有元素是可选的除上浆(地方7),其是在一个cache-template虽然可选的。

1

您必须添加xsi:schemaLocationlisteners配置后expiry

您的Ehcache配置的正确形式低于:

<?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-3.0.xsd 
     http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd"> 

    <service> 
     <jsr107:defaults> 
      <jsr107:cache name="people" template="heap-cache"/> 
     </jsr107:defaults> 
    </service> 

    <!--thread-pools> 
     <thread-pool alias="defaultDiskPool" min-size="1" max-size="3"/> 
    </thread-pools--> 

    <!--disk-store thread-pool="defaultDiskPool" /--> 

    <cache-template name="heap-cache"> 
     <expiry> 
      <ttl unit="seconds">10</ttl> 
     </expiry> 
     <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> 
     <resources> 
      <heap unit="entries">2000</heap> 
      <offheap unit="MB">100</offheap> <!-- unit of measure is case sensitive! --> 
     </resources> 

     <!--disk-store-settings thread-pool="defaultDiskPool" writer-concurrency="2" /--> 

    </cache-template> 
</config>