Не найдено подходящего облачного соединителя при попытке использовать локальный весенний облачный соединитель /local_configuration_connector
Я пытаюсь использовать локальный облачный пружинный соединитель для тестирования моего приложения в локальной среде, прежде чем оно может быть развернуто в облачной среде на основе CF. С весны ссылка
http://cloud.spring.io/spring-cloud-connectors/spring-cloud-connectors.html
Я проследил за процессом и создал файл свойств с именем spring-cloud-bootstrap.properties в каталоге ресурсов проекта. Имеет следующее содержание
spring.cloud.propertiesFile: C:\Users\IBM_ADMIN\git\ServiceXchange5\ServiceXchange\spring-cloud.properties
У меня есть файл spring-cloud.properties по указанному выше пути.
С фасоли весенней конфигурации у меня следующее
@EnableWebMvc
@Configuration
@EnableAspectJAutoProxy
public class CloudServiceConfig extends AbstractCloudConfig {
@Bean
public DataSource getDataSource() throws AppException {
org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig poolConfig = new PoolConfig(50, 100, 3000);
org.springframework.cloud.service.relational.DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, null);
return connectionFactory().dataSource(SX_DB_USED, dbConfig);
}
Теперь этот компонент DataSource внедряется в различных других местах. Места с файлами свойств, я ожидаю, что будет создан bean-компонент коннектора для локальной конфигурации, и я смогу использовать его, чтобы добавить больше конфигурации для DataSource для пула соединений.
Однако, когда я получаю доступ к приложению, кажется, что сам локальный Коннектор конфигурации не активирован
Initialization of bean failed; nested exception is org.springframework.cloud.CloudException: No suitable cloud connector found
[ERROR ] SRVE0271E: Uncaught init() exception created by servlet [appServlet] in application [ServiceXchange]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cloudServiceConfig' defined in file [C:\Users\IBM_ADMIN\git\ServiceXchange5\ServiceXchange\target\classes\com\hcl\service\config\CloudServiceConfig.class]: Initialization of bean failed; nested exception is org.springframework.cloud.CloudException: No suitable cloud connector found
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:2388)
at [internal classes]
Caused by: org.springframework.cloud.CloudException: No suitable cloud connector found
at org.springframework.cloud.CloudFactory.getCloud(CloudFactory.java:55)
at org.springframework.cloud.config.java.AbstractCloudConfig.setBeanFactory(AbstractCloudConfig.java:85)
at com.hcl.service.config.CloudServiceConfig$$EnhancerBySpringCGLIB$$9529c032.CGLIB$setBeanFactory$54(<generated>)
at com.hcl.service.config.CloudServiceConfig$$EnhancerBySpringCGLIB$$9529c032$$FastClassBySpringCGLIB$$6c6301dd.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanFactoryAwareMethodInterceptor.intercept(ConfigurationClassEnhancer.java:277)
at com.hcl.service.config.CloudServiceConfig$$EnhancerBySpringCGLIB$$9529c032.setBeanFactory(<generated>)
at org.springframework.context.annotation.ConfigurationClassPostProcessor$EnhancedConfigurationBeanPostProcessor.postProcessPropertyValues(ConfigurationClassPostProcessor.java:480)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
... 13 more
Я не уверен, почему локальный облачный соединитель не активирован. По ссылке следует после обнаружения файлов свойств на месте.
ПРИМЕЧАНИЕ. Я попытался поместить файл свойств в другое место, например (непосредственно в корень приложения, в web-inf / lib, в ресурсы и т. Д.)
Любая помощь здесь?
2 ответа
В недавнем проекте у нас была та же проблема. В облаке все работало, но локально выдавалась ошибка "Подходящий облачный соединитель не найден". Чтобы исключить проблемы с зависимостями, в нашем случае (микросервис Spring Boot для развертывания в среде CloudFoundry) было достаточно следующих двух зависимостей (версия, управляемая управлением зависимостями).
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-spring-service-connector</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-cloudfoundry-connector</artifactId>
</dependency>
CloudFoundryConnector, который следует использовать, проверяет, установлена ли переменная среды VCAP_APPLICATION, и только затем помечает себя как подходящую, иначе он ничего не будет делать. Обычно говорят, что это антипаттерн для репликации переменных VCAP_SERVICES и VCAP_APPLICATION в локальной среде, но в нашем сценарии использования это было именно то решение, чтобы все работало локально как можно ближе к облачной среде.
Этот ответ, вероятно, слишком поздно для первоначального вопроса, но, как отправная точка для других потерянных душ, у которых случается та же самая проблема, он, мы надеемся, сэкономит другим время отладки, которое мы потратили.
Если вы работаете локально, вы можете не получить экземпляр Cloud, что приведет к этому. Необходимо убедиться, что предназначен ли он для локального или облачного использования, в зависимости от использования. В моем случае дело было в том, где он был вызван. Поэтому при развертывании в облаке я добавил дополнительный метод для создания экземпляра облачного хранилища (CloudFactory(). GetCloud()).
Вы используете плагин Maven Shade для упаковки вашего приложения? Если это так, убедитесь, что <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
на месте.
Насколько я проанализировал, когда этого не хватает, коннектор Cloud-Foundry переопределяет / перекрывает ServiceLoaders из Local-Connector.
Все это, конечно, только если вы пытаетесь запустить свой локально собранный пакет. Непосредственно из IDE (IntelliJ в моем случае) это всегда работало.