デフォルトの Spring ブート自動構成では、JCache を使用し、キャッシュが有効になっている場合に 2 つの hazelcast インスタンスが作成されるようです ( @EnableCaching
)
完全な例: https://github.com/dirkvanrensburg/hazelcast-springboot-jcache
TLDR; JCache を介したキャッシュを有効にするときに、Spring ブートの自動構成で Hazelcast インスタンスを 1 つだけ作成する方法はありますか?
次の依存関係を追加して、デモ Spring ブート プロジェクトを作成しました。
<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 を自動構成しますが、2 つの 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 の 2 つのインスタンスは必要ありません。
ハック
独自のキャッシュマネージャーを提供することで、なんとか機能させることができました。
@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