Java17+SpringBoot3迁移:EhCache与Hazelcast缓存提供者冲突解决
问题:Spring Boot 3.2.3 + Java 17 迁移中EhCache与Hazelcast缓存提供者冲突
错误信息
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.cache.spi.CacheImplementor] due to: Cache provider not started javax.cache.CacheException: Multiple CachingProviders have been configured when only a single CachingProvider is expected
问题背景
将应用从Java 8 + Spring Boot 2.7.18迁移至Java 17 + Spring Boot 3.2.3时,迁移EhCache出现上述错误。经排查,Spring Boot 3默认将Hazelcast作为缓存提供者,与启用的EhCache产生多缓存提供者冲突,但Java 8 + Spring Boot 2环境无此问题。项目包含Hazelcast依赖,但仅需通过application.yaml按需启用,不应默认启动。目前仅完成javax到jakarta的替换、依赖版本更新及EhCache的YAML配置修改,不想修改Spring主类代码,寻求无代码解决方案。
当前依赖配置
POM依赖片段
<dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast</artifactId> <version>${hazelcast.version}</version> </dependency> <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast-spring</artifactId> <version>${hazelcast.version}</version> </dependency> <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast-kubernetes</artifactId> <version>${hazelcast-kubernetes.version}</version> </dependency> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-ehcache</artifactId> <version>${hibernate-ehcache.version}</version> </dependency> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-jcache</artifactId> <version>${hibernate-jcache.version}</version> </dependency> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache</artifactId> <version>${ehcache.version}</version> </dependency>
依赖版本
<hazelcast-kubernetes.version>2.2.3</hazelcast-kubernetes.version> <hazelcast.version>5.3.6</hazelcast.version> <hibernate-ehcache.version>6.0.0.Alpha7</hibernate-ehcache.version> <hibernate-jcache.version>6.4.4.Final</hibernate-jcache.version> <ehcache.version>3.10.8</ehcache.version>
无代码解决方案
方案1:指定默认JCache缓存提供者
在application.yaml中配置,强制Spring和Hibernate使用EhCache作为缓存提供者,避免自动检测到Hazelcast:
spring: cache: type: jcache jcache: provider: org.ehcache.jsr107.EhcacheCachingProvider jpa: properties: hibernate: cache: region: factory_class: org.hibernate.cache.jcache.JCacheRegionFactory jcache: provider: org.ehcache.jsr107.EhcacheCachingProvider
方案2:禁用Hazelcast自动配置
直接让Spring Boot不自动初始化Hazelcast,仅当你显式配置启用时才生效:
spring: autoconfigure: exclude: com.hazelcast.spring.boot.autoconfigure.HazelcastAutoConfiguration
方案3:通过开关控制Hazelcast启动
如果项目原本就有Hazelcast的启用开关,确保默认关闭,仅在需要时手动开启:
hazelcast: enabled: false
内容的提问来源于stack exchange,提问作者Meowtobot
相关产品推荐
相关产品推荐

