gpt4 book ai didi

java - Spring Boot 中的 Hazelcast 和 JCache 创建两个实例

转载 作者:行者123 更新时间:2023-12-01 20:57:14 26 4
gpt4 key购买 nike

看起来默认的 Spring boot 自动配置将在使用 JCache 并启用缓存时创建两个 hazelcast 实例 (@EnableCaching)

完整示例位于:https://github.com/dirkvanrensburg/hazelcast-springboot-jcache

TLDR; Is there a way to get Spring boot's autoconfiguration to only create one Hazelcast instance when enabling caching through JCache?

我通过添加以下依赖项创建了一个演示 Spring boot 项目:

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>

<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
</dependency>

<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
</dependency>

<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-spring</artifactId>
<version>${hazelcast.version}</version>
</dependency>

并向 Application 类添加 @EnableCaching ,Spring 将自动配置 Hazelcast 但启动两个 hazelcast 实例,它们会加入集群,如日志中所示:

Members [2] {
Member [192.168.1.157]:5701 - 3eabbe90-6815-49ff-8d93-9e4b12e67810
Member [192.168.1.157]:5702 - e9c93366-2408-4726-965a-b21dcf897113 this
}

缓存有效,但我不需要两个 Hazelcast 实例。

黑客攻击

我设法通过提供自己的缓存管理器来使其工作:

@Bean
public CacheManager springHzProvider(HazelcastInstance instance) {
return SpringHazelcastCachingProvider.getCacheManager(instance, null, new Properties());
}

并删除hazelcasthazelcast-spring依赖项并添加hazelcast-all:

    <dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
<version>${hazelcast.version}</version>
</dependency>

但问题仍然是是否有更好的“正确”方法来实现这一目标?理想情况下,无需定义自定义缓存管理器并添加 hazelcast-all

最佳答案

@dvanrensburg 根据评论,作为临时解决方案,从自动配置中排除 HazelcastAutoConfiguration 类。我记录了 Spring Boot 的问题 https://github.com/spring-projects/spring-boot/issues/8275我认为这是根本原因,如果 @EnableCaching 触发了第一个实例的创建,则不应创建第二个实例。

关于java - Spring Boot 中的 Hazelcast 和 JCache 创建两个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com