You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 19:05:17