Wildfly 11升级至18后Infinispan驱逐配置解析失败求助
解决Wildfly 18中Infinispan驱逐配置解析失败的问题
这个问题我之前帮同事排查过,核心原因是Wildfly升级后Infinispan的配置模型发生了变化,再加上你使用的subsystem命名空间不匹配,才导致了报错。下面一步步给你解决:
为什么原来的配置会报错?
在Wildfly 11(对应Infinispan 8.x/4.x subsystem)中,驱逐配置是通过单独的<eviction>标签定义的,但从Infinispan 9.x开始,驱逐和内存存储的配置被整合到了<memory>标签中,旧的<eviction>标签在新的subsystem版本里已经不再允许使用,所以会提示'eviction' isn't an allowed element here。
而你尝试用<memory>标签却提示未识别,是因为你用的是urn:jboss:domain:infinispan:9.0命名空间——Wildfly 18对应的Infinispan subsystem版本是9.4,9.0的命名空间里还没引入<memory>标签,必须使用匹配的9.4命名空间才能识别这个新标签。
正确的配置示例
把你的配置改成下面这样,就能正常运行了:
<subsystem xmlns="urn:jboss:domain:infinispan:9.4"> <cache-container name="security" default-cache="auth-cache"> <local-cache name="auth-cache"> <locking acquire-timeout="${infinispan.cache-container.security.auth-cache.locking.acquire-timeout}"/> <!-- 替换原来的<eviction>标签 --> <memory max-count="${infinispan.cache-container.security.auth-cache.eviction.max-entries}"> <eviction strategy="LRU" type="COUNT"/> </memory> <expiration max-idle="-1"/> </local-cache> </cache-container> </subsystem>
关键配置说明
- 命名空间匹配:必须使用
urn:jboss:domain:infinispan:9.4,这是Wildfly 18对应的官方subsystem版本,确保<memory>标签能被正确解析。 标签参数 :max-count对应原来的max-entries,表示缓存的最大条目数;type="COUNT"表示按条目数量限制缓存大小,和你原来的驱逐逻辑完全一致;strategy="LRU"保留了你原来的最近最少使用驱逐策略,行为和之前没有变化。
- 其他可选配置:如果需要按内存大小限制缓存,可以把
type改成MEMORY,然后用max-size参数(比如max-size="100MB"),但你的场景用COUNT就足够了。
验证配置的小技巧
你可以用Wildfly的CLI工具验证配置是否正确,启动Wildfly后执行以下命令:
/subsystem=infinispan/cache-container=security/local-cache=auth-cache:read-resource-description
如果返回的资源描述中包含memory相关的配置项,说明你的配置已经被正确识别了。
内容的提问来源于stack exchange,提问作者user1184777
相关产品推荐
相关产品推荐

