Hibernate v6集成Ehcache缓存失败:XmlConfigurationException报错
Hibernate v6集成Ehcache缓存报错
Cache provider not started解决办法 核心问题定位
报错根源是JAXB依赖缺失:Hibernate 6和Ehcache解析XML配置时需要JAXB实现,但JDK 9+已将JAXB从核心模块移除,仅添加--add-modules java.xml.bind只引入了API,缺少具体实现类,导致无法解析ehcache.xml。
具体修复步骤
1. 补充JAXB实现依赖
在Gradle中添加Jakarta版本的JAXB依赖(适配Hibernate 6的Jakarta EE规范,避免冲突):
dependencies { // JAXB API implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.1' // JAXB 参考实现 implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.3' }
2. 检查Ehcache配置文件
- 确保
ehcache.xml放在src/main/resources根目录,若自定义路径需在Hibernate配置中指定:hibernate.javax.cache.uri=classpath:ehcache-custom.xml - 验证XML格式符合Ehcache 3.x规范(Hibernate 6适配Ehcache 3+),示例基础配置:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.ehcache.org/v3" xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd"> <cache alias="com.yourpackage.YourEntity"> <key-type>java.lang.Long</key-type> <value-type>com.yourpackage.YourEntity</value-type> <expiry> <ttl unit="minutes">10</ttl> </expiry> <heap unit="entries">1000</heap> </cache> </config>
3. 修正Hibernate缓存配置
确保配置中正确指定JCache提供方:
# 启用二级缓存 hibernate.cache.use_second_level_cache=true # 指定JCache区域工厂 hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory # 指定Ehcache作为JCache实现 hibernate.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider
4. 移除不必要的模块参数
已添加JAXB依赖后,--add-modules java.xml.bind参数可能引发冲突,建议从Gradle运行任务中移除。
5. 排查依赖冲突
执行gradle dependencies命令,检查是否存在旧版javax.xml.bind或ehcache依赖,排除冲突项:
configurations.all { exclude group: 'javax.xml.bind', module: 'jaxb-api' exclude group: 'net.sf.ehcache', module: 'ehcache' // 排除Ehcache 2.x旧版本 }
内容的提问来源于stack exchange,提问作者Carry out
相关产品推荐
相关产品推荐

