Похоже, что автоматическая конфигурация загрузки Spring по умолчанию создаст два экземпляра hazelcast при использовании JCache и включенном кешировании (@EnableCaching
)
Полный пример: https://github.com/dirkvanrensburg/hazelcast-springboot-jcache
TL; DR; Есть ли способ получить автоконфигурацию загрузки Spring для создания только одного экземпляра Hazelcast при включении кэширования через JCache?
Я создал демонстрационный проект загрузки 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>
и добавив @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
@EnableAutoConfiguration
, чтобы исключить классHazelcastAutoConfigurtation
Spring Boot и удалить свой методspringHzProvider
. Это не идеальное решение, но немного чище. - person Neil Stevenson   schedule 10.02.2017HazelcastClientProxy
в путь к классам. Вы понимаете, что здесь происходит? Возможно, это ошибка вCacheAutoConfiguration
? Если вы хотите добавить свой комментарий в качестве ответа, я приму его, поскольку он решает обе мои проблемы (пользовательский кеш-менеджер, добавление hazelcast-all) - person dvanrensburg   schedule 12.02.20171.5.3.RELEASE
. - person Stephane Nicoll   schedule 10.03.2017