Не найдено подходящего облачного соединителя при попытке использовать локальный облачный соединитель/local_configuration_connector

Я пытаюсь использовать локальный коннектор облачной пружины для тестирования своего приложения в локальной среде, прежде чем его можно будет развернуть в облачной среде на основе CF. По весенней ссылке

http://cloud.spring.io/spring-cloud-connectors/spring-cloud-connectors.html#_local_configuration_connector

Я следовал процессу и создал файл свойств с именем spring-cloud-bootstrap.properties в каталоге ресурсов проекта. Он имеет следующее содержание

spring.cloud.propertiesФайл: 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);

}

Теперь этот bean-компонент 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, в ресурсах и т. д.).

Любая помощь здесь?


person Manoj K Sardana    schedule 03.01.2017    source источник
comment
Просто начнем с самой простой возможной проблемы: можете ли вы поделиться своим списком зависимостей, чтобы убедиться, что у вас есть все необходимые файлы jar, включенные в ваш проект?   -  person Scott Frederick    schedule 03.01.2017
comment
@Scott вот записи POM ‹dependency› ‹groupId›org.springframework.cloud‹/groupId› ‹artifactId›spring-cloud-localconfig-connector‹/artifactId› ‹version›1.2.3.RELEASE‹/version› ‹/ dependency› ‹dependency› ‹groupId›org.springframework.cloud‹/groupId› ‹artifactId›spring-cloud-spring-service-connector‹/artifactId› ‹version›1.2.3.RELEASE‹/version› ‹/dependency›   -  person Manoj K Sardana    schedule 04.01.2017
comment
Я также попытался добавить коннектор облачного литейного производства (хотя я не думаю, что это требуется для локальной конфигурации), но та же ошибка. Со стороны Spring я использую версию 4.2.6.   -  person Manoj K Sardana    schedule 04.01.2017
comment
@ManojKSardana- У вас есть какое-нибудь решение для этого? Даже я сталкиваюсь с этой ошибкой.   -  person Loren    schedule 12.02.2020


Ответы (3)


В недавнем проекте у нас была такая же проблема. В облаке все работало, но локально выдавало ошибку "Не найден подходящий облачный коннектор". Чтобы исключить проблемы с зависимостями, в нашем случае (микросервис 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 в локальной среде, но в нашем случае это было именно то решение, чтобы все работало локально как можно ближе к облачной среде.

Этот ответ, вероятно, слишком запоздал для исходного вопроса, но в качестве отправной точки для других заблудших душ, у которых возникла такая же проблема, он, надеюсь, сэкономит другим время на отладку, которое мы потратили.

person Thomas W    schedule 15.03.2018
comment
cloud.spring.io/spring-cloud-connectors/ - так вы говорите, что коннектор localconfig никогда не нужен? - person Kalpesh Soni; 30.04.2019

Если вы работаете локально, вы можете не получить экземпляр Cloud, что приведет к этому. Нужно убедиться, что он предназначен для локального или облачного использования, в зависимости от использования. В моем случае это был вопрос, где он был вызван. Поэтому при развертывании в облаке я добавил дополнительный метод для создания экземпляра cloudfoundry (CloudFactory().getCloud()).

person Smart Coder    schedule 22.01.2020

Используете ли вы плагин maven shadow для упаковки своего приложения? Если это так, убедитесь, что <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> на месте.

Насколько я проанализировал, когда это отсутствует, коннектор Cloud-Foundry переопределяет/перекрывает ServiceLoaders из Local-Connector.

Все это, конечно, только в том случае, если вы пытаетесь запустить свой локально собранный пакет. Непосредственно из IDE (IntelliJ в моем случае) это всегда работало.

person Andreas Schilling    schedule 22.05.2017