Java 17 + Spring boot 3 迁移 - EhCache 与 Hazelcast 冲突

问题描述 投票:0回答:1

我正在将我的应用程序从 Java 8 和 Spring Boot 2.7.18 迁移到 Java 17 和 Spring Boot 3.2.3。

我正在尝试迁移 EhCache(我使用此 link 进行迁移,因为我之前的配置符合“旧”定义),并且出现以下错误:

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

现在最初我以为我配置了 EhCache 错误,但是后来我通过这个answer发现我的 Spring 应用程序默认使用 hazelcast 作为缓存提供程序,这导致了 ehcache 和 hazelcast (多个缓存提供程序)之间的冲突,当我启用EhCache。

但是,它在之前的 Java 8 和 Spring Boot 2 堆栈中并没有这样做,所以我想知道我可以做什么来禁用它,而不必求助于 这个答案,因为我不需要代码在我的春天主要。

注意,我确实在我的项目中有hazelcast,但它是通过application.yaml启用的,并且不应在应用程序启动时启用。

此外,我没有对我的代码进行任何更改(除了将 javax 更改为 jakarta),我只是更新依赖项的版本并更改 ehcache 的 yaml 属性。

我的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>
我使用了我之前提到的答案,它有积极的结果,但是我希望不必在我的 main 中使用代码来让 ehcache 正常工作,所以我希望 spring 不要将 hazelcast 视为我的默认缓存提供程序。

java spring hazelcast ehcache
1个回答
0
投票
当类路径中存在多个 JCache 提供程序时,您可以通过在

application.properties 中包含以下行来指定要使用哪一个:

spring.jpa.properties.hibernate.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider
如果您不指定此属性,hibernate-jcache 将尝试自动发现提供程序。然后它找到了两个提供者(

ECacheHZ),因此导致异常的发生。

© www.soinside.com 2019 - 2024. All rights reserved.