0

デフォルトの 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

4

2 に答える 2