ehcache 在 Tomcat Docker 图像中不工作
ehcache not working in Tomcat Docker image
我收到了 Java 容器化申请。
该应用程序当前 运行正在 Tomcat8 JRE8 AWS Elasticbeanstalk 实例上运行。
但是,该应用程序无法在我的 Docker 映像中部署,该映像是从 Amazon Linux 基础映像构建的,通过 RPM 安装了 OpenJDK8 和 Tomcat8。
与 Ehcache 相关的部署错误:
Error creating bean with name 'getEhcache' defined in *****: Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: Error configuring from input stream. Initial cause was null:16: Element <cache> does not allow attribute "maxEntriesLocalHeap".
我了解到这个错误一般是在Ehcache和使用的Ehcache版本配置不匹配时出现的,即2.10版本引入了maxEntriesLocalHeap,如果2.10版本不可用,就会出现这个错误。
我已经检查了应用程序有效负载,正确的 jar 可用:
bash-4.2# pwd
/var/lib/tomcat8/webapps/ROOT/WEB-INF/lib
bash-4.2# ls -la ehcache-*
-rw-rw-r-- 1 root root 8914463 Jan 24 12:27 ehcache-2.10.2.jar
-rw-rw-r-- 1 root root 1006074 Jan 24 12:27 ehcache-core-2.4.5.jar
-rw-rw-r-- 1 root root 124522 Jan 24 12:27 ehcache-spring-annotations-1.2.0.jar
开发人员告诉我该应用程序正在使用旧版本的 Ehcache,但我看不出这在原始 Docker 映像中如何实现。我认为这是在 运行.
时由与 Docker 容器中的权限或文件系统访问有关的事情生成的虚假错误
应用程序随附的 ehcache.xml 文件是:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir"/>
<cache name="messageCache"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="43200" timeToLiveSeconds="43200"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap"/>
</cache>
如有任何帮助,我们将不胜感激。
Ehcache在历史进程中改变了jar的名称。您的冲突来自您的类路径中同时包含 ehcache-core-2.4.5.jar
和 ehcache-2.10.2.jar
。
很可能第一个被第一个拾取,因此你得到这个无效的属性错误。您很可能必须删除 ehcache-core-2.4.5.jar
但这可能需要增加其他依赖项,尽管 Ehcache 总是试图在 2.x 行中保持向后兼容性。
我收到了 Java 容器化申请。
该应用程序当前 运行正在 Tomcat8 JRE8 AWS Elasticbeanstalk 实例上运行。
但是,该应用程序无法在我的 Docker 映像中部署,该映像是从 Amazon Linux 基础映像构建的,通过 RPM 安装了 OpenJDK8 和 Tomcat8。
与 Ehcache 相关的部署错误:
Error creating bean with name 'getEhcache' defined in *****: Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: Error configuring from input stream. Initial cause was null:16: Element <cache> does not allow attribute "maxEntriesLocalHeap".
我了解到这个错误一般是在Ehcache和使用的Ehcache版本配置不匹配时出现的,即2.10版本引入了maxEntriesLocalHeap,如果2.10版本不可用,就会出现这个错误。
我已经检查了应用程序有效负载,正确的 jar 可用:
bash-4.2# pwd
/var/lib/tomcat8/webapps/ROOT/WEB-INF/lib
bash-4.2# ls -la ehcache-*
-rw-rw-r-- 1 root root 8914463 Jan 24 12:27 ehcache-2.10.2.jar
-rw-rw-r-- 1 root root 1006074 Jan 24 12:27 ehcache-core-2.4.5.jar
-rw-rw-r-- 1 root root 124522 Jan 24 12:27 ehcache-spring-annotations-1.2.0.jar
开发人员告诉我该应用程序正在使用旧版本的 Ehcache,但我看不出这在原始 Docker 映像中如何实现。我认为这是在 运行.
时由与 Docker 容器中的权限或文件系统访问有关的事情生成的虚假错误应用程序随附的 ehcache.xml 文件是:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir"/>
<cache name="messageCache"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="43200" timeToLiveSeconds="43200"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap"/>
</cache>
如有任何帮助,我们将不胜感激。
Ehcache在历史进程中改变了jar的名称。您的冲突来自您的类路径中同时包含 ehcache-core-2.4.5.jar
和 ehcache-2.10.2.jar
。
很可能第一个被第一个拾取,因此你得到这个无效的属性错误。您很可能必须删除 ehcache-core-2.4.5.jar
但这可能需要增加其他依赖项,尽管 Ehcache 总是试图在 2.x 行中保持向后兼容性。