Db2Service выпуск-весна Облачный литейный завод

У меня возникла проблема при подключении службы db2 в облачной литейной. Я создал службу как cf cups db2service -p "jdbcUrl, user, password". При развертывании приложения в облаке я сталкиваюсь с исключением приведения класса, а также не найдено исключение для подходящего соединителя. Ниже приведен мой класс конфигурации.

@Configuration
@ServiceScan
@Profile("cloud")
public class Db2CloudConfig extends AbstractCloudConfig {

    @Bean
    public DataSource db2servicenew() {

        CloudFactory cloudFactory = new CloudFactory();
        Cloud cloud = cloudFactory.getCloud();
        DB2ServiceInfo db2ServiceInfo= (DB2ServiceInfo) cloud.getServiceInfo("db2servicenew"); 
        return cloud.getServiceConnector(db2ServiceInfo.getId(), DataSource.class, null);

    }

    @Bean(name = "db2JdbcTemplate") 
    public JdbcTemplate jdbcTemplate(DataSource db2servicenew) { 
        return new JdbcTemplate(db2servicenew); 
    } 

}

Я также добавил следующие зависимости в мой файл Gradle.

compile("org.springframework.cloud:spring-cloud-spring-service-connector:1.2.0.RELEASE")
compile("org.springframework.cloud:spring-cloud-cloudfoundry-connector:1.2.0.RELEASE")
compile("org.springframework.cloud:spring-cloud-core:1.2.0.RELEASE")

Можете ли вы помочь мне с этим вопросом.

1 ответ

На основе java.lang.ClassCastException: org.springframework.cloud.service.BaseServiceInfo cannot be cast to org.springframework.cloud.service.common.DB2ServiceInfo за исключением того, мне кажется, что вы не получаете зависимости Connectors, которую, как вы думаете, вы получаете.

Чтобы подтвердить это, запустите gradle :dependencies Задача и посмотреть, какие версии вы на самом деле получаете. Соответствующая часть вывода этой задачи должна выглядеть примерно так:

+--- org.springframework.cloud:spring-cloud-spring-service-connector: -> 1.2.0.RELEASE
|    +--- org.springframework.cloud:spring-cloud-core:1.2.0.RELEASE
|    \--- org.springframework:spring-context:3.1.4.RELEASE -> 4.1.7.RELEASE (*)
+--- org.springframework.cloud:spring-cloud-cloudfoundry-connector: -> 1.2.0.RELEASE
|    \--- org.springframework.cloud:spring-cloud-core:1.2.0.RELEASE

Если моя догадка верна, вы можете вместо этого увидеть что-то в выводе org.springframework.cloud:spring-cloud-spring-service-connector:1.2.0.RELEASE -> 1.1.1.RELEASE (*)указывает на то, что gradle выбирает использовать более старую версию, чем та, о которой вы просили, основываясь на других переходных зависимостях. Я видел, как это происходит с приложениями Spring Boot, так как Boot загружает более старую версию Connectors.

Если вы видите, что эта версия понижена, вы должны посмотреть на плагин Spring propdeps для gradle, чтобы получить четкие зависимости.

Если проблема не в этом, вам нужно предоставить пример проекта, который демонстрирует эту проблему.

Другие вопросы по тегам