Вы не можете подключиться к Locator (используя Gfsh ), потому что у вас нет Locator (служба, автономная или встроенная) работает только с конфигурацией Spring (Java), показанной выше.
Обратите внимание, что аннотация @CacheServerApplication(locators = "localhost[10334]")
, в частности с атрибутом locators
, как вы настроили выше, НЕ запускает встроенный Locator . Он просто позволяет этому Spring Boot сконфигурированному и загруженному узлу Apache Geode или Pivotal GemFire peer Cache
присоединиться к существующей распределенной системе (кластеру) с «существующим» Locator , работающим на localhost
прослушивает порт 10334
.
Например, вы могли запустить Locator , используя Gfsh (например, start locator --name=X ...
), а затем запустить приложение Spring Boot с Конфигурация Spring (Java), показанная выше, и вы увидите приложение Spring Boot как часть кластера, образованного Gfsh запущен Локатор .
Это просто ярлык (удобство) для настройки и запуска «встроенного» локатора, но для этого вам нужно использовать аннотацию @EnableLocator
.
Следовательно, для настройки и запуска (встроенной) службы Locator в том же приложении Spring Boot , что и CacheServer (и Manager * 1051) *), вы также должны включить аннотацию @EnableLocator
, например:
@SpringBootApplicaton
@CacheServerApplication
@EnableLocator
@EnableManager(start = true)
public class GemFireServerApplication {
...
}
У меня есть множество примеров этого здесь , например здесь , и обычно об этом говорят здесь и т. Д.
Как примечание: вся ваша конфигурация (класс) запутана, и становится ясно, что вы не совсем понимаете, что делаете. Например, объявление компонентов gemfireProperties
и gemfireCache
в JavaConfig является избыточным и ненужным, поскольку вы используете аннотацию @CacheServerApplication
. Вся ваша конфигурация может быть упрощена до:
@ CacheServerApplication (
name = "SpringDataGemFireApplication",
locators = "localhost [10334]",
logLevel = "информация"
)
@EnableLocator
@EnableManager (start = true)
@EnableGemfireRepositories (basePackages = "com.gemfire.demo")
@ComponentScan
открытый класс GemfireConfiguration {
@Bean(name="employee")
LocalRegionFactoryBean<String, Employee> getEmployee(GemFireCache cache) {
LocalRegionFactoryBean<String, Employee> employeeRegion =
new LocalRegionFactoryBean<String, Employee>();
employeeRegion.setCache(cache);
employeeRegion.setClose(false);
employeeRegion.setName("employee");
employeeRegion.setPersistent(false);
employeeRegion.setDataPolicy(DataPolicy.PRELOADED);
return employeeRegion;
}
}
Две вещи:
1) Во-первых, я бы очень внимательно следил за использованием сканирования компонентов classpath (@ComponentScan
). Я не фанат этого подхода к конфигурации, особенно в производстве, где все должно быть ясно.
2) Я бы рекомендовал вам использовать атрибут type-safe basePackageClasses
в аннотации @EnableGemFireRepositorities
вместо атрибута basePackages
. С basePackageClasses
вам нужно всего лишь ссылаться на один интерфейс / класс в нужном пакете (например, com.gemfire.demo
), а не на каждый интерфейс / класс. Упомянутый интерфейс / класс служит указателем для идентификации пакета для сканирования, включая все подпакеты. Это безопасно для типов, и когда ваши интерфейсы / классы в этом пакете переставляются, ваш атрибут остается действительным после рефакторинга.
В любом случае ...
Надеюсь, это поможет.
-j