它使用的JCache和緩存的時候貌似默認春天開機自動配置將創建兩個hazelcast情況下啓用(@EnableCaching
)Hazelcast和的JCache在春季啓動創建兩個實例
完整的示例在:https://github.com/dirkvanrensburg/hazelcast-springboot-jcache
TLDR; 有沒有辦法讓Spring Boot的自動配置只在通過JCache啓用緩存時創建一個Hazelcast實例?
<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
到應用程序類,彈簧會自動配置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
見https://github.com/hazelcast/hazelcast-code-samples/tree/master/hazelcast-integration/springboot-caching-jcache。您可以添加'@ EnableAutoConfiguration'註釋來排除Spring Boot的'HazelcastAutoConfigurtation'類並刪除您的'springHzProvider'方法。這不是一個理想的解決方案,但有點乾淨。 –
謝謝,這工作,實際上更乾淨。我不需要將'HazelcastClientProxy'添加到類路徑中。 你明白這裏發生了什麼嗎?這可能是'CacheAutoConfiguration'中的一個錯誤嗎? 如果你想添加你的評論作爲答案,那麼我會接受它,因爲它解決了我的兩個問題(自定義緩存管理器,添加榛樹全部) – dvanrensburg
我會首先提出它與Spring Boot的問題,並添加鏈接 –