使用 JCache 并启用缓存时,默认的 Spring boot 自动配置似乎会创建两个 hazelcast 实例(@EnableCaching
)
完整示例位于:https ://github.com/dirkvanrensburg/hazelcast-springboot-jcache
TLDR; 当通过 JCache 启用缓存时,有没有办法让 Spring Boot 的自动配置只创建一个 Hazelcast 实例?
我通过添加以下依赖项创建了一个演示 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>
并添加@EnableCaching
到 Application 类中,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());
}
并删除hazelcast
和hazelcast-spring
依赖项并添加hazelcast-all
:
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
<version>${hazelcast.version}</version>
</dependency>
但问题仍然是是否有更好的“正确”方法来实现这一目标?理想情况下,无需定义自定义缓存管理器并添加hazelcast-all