用于Cloudfoundry的Spring Cloud Data Flow Server-外部数据源

时间:2018-10-23 15:40:44

标签: pivotal-cloud-foundry spring-cloud-dataflow

使用:Pivotal Cloudfoundry v2.x,Spring Cloud Data Flow Server v1.6.2.RELEASE,SQL Server 2016。

如果服务器数据源配置不是与PCF中的应用程序绑定的服务,则它似乎无法成功创建数据源。

SQL Server数据库不是我们PCF市场中提供的服务。我已经重建了服务器应用程序,并将SQL Server jdbc驱动程序jar添加到类路径中。我还包括了数据源配置:

---
applications: 
- path: spring-cloud-dataflow-server-cloudfoundry-1.6.2.RELEASE.jar
  name: dataflow-server
  host: dataflow-server
  memory: 4096M
  disk_quota: 2048M
  no-route: false
  no-hostname: false
  health-check-type: 'port' 
  buildpack: java_buildpack_offline
  env: 
    JAVA_OPTS: -Dhttp.keepAlive=false
    JBP_CONFIG_CONTAINER_CERTIFICATE_TRUST_STORE: '{enabled: true}' 
    SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_SPACE: channing
    SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_APP_NAME_PREFIX: channing
    SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_URL: https://api.pcf.com
    SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_DOMAIN: pcf.com
    SPRING_APPLICATION_NAME: dataflow-server
    SPRING_DATASOURCE_URL: jdbc:sqlserver://nonpcf.sqlserver.com\\DBINSTANCE:1713;databaseName=SCDF_DEV 
    SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.microsoft.sqlserver.jdbc.SQLServerDriver
    SPRING_DATASOURCE_USERNAME: username
    SPRING_DATASOURCE_PASSWORD: password
  services: 
    - config-server
    - rabbit
  security: 
    basic: 
      enabled: true
      realm: Spring Cloud Data Flow
  spring: 
    cloud: 
      dataflow: 
        features: 
          analytics-enabled: false

该错误在应用程序启动期间发生,表明存在未解决的依赖关系,其中没有可用于注入的javax.sql.DataSource唯一实例。

这是一些堆栈跟踪:

2018-10-23T09:39:14.365-06:00 [APP/PROC/WEB/0] [OUT] Caused by: org.springframework.cloud.CloudException: No unique service matching interface javax.sql.DataSource found. Expected 1, found 0
2018-10-23T09:39:14.365-06:00 [APP/PROC/WEB/0] [OUT] at org.springframework.cloud.Cloud.getSingletonServiceConnector(Cloud.java:197) ~[spring-cloud-connectors-core-2.0.2.RELEASE.jar!/:na]
2018-10-23T09:39:14.365-06:00 [APP/PROC/WEB/0] [OUT] at org.springframework.cloud.config.java.CloudServiceConnectionFactory.dataSource(CloudServiceConnectionFactory.java:56) ~[spring-cloud-spring-service-connector-2.0.2.RELEASE.jar!/:na]
2018-10-23T09:39:14.365-06:00 [APP/PROC/WEB/0] [OUT] at org.springframework.cloud.dataflow.server.cloudfoundry.config.DataSourceCloudConfig.scdfCloudDataSource(DataSourceCloudConfig.java:47) ~[spring-cloud-dataflow-server-cloudfoundry-autoconfig-1.6.2.RELEASE.jar!/:1.6.2.RELEASE]

这是故意的吗?我们如何将PCF SCDF服务器与不在基金会中的数据源绑定?

1 个答案:

答案 0 :(得分:0)

Spring Cloud Data Flow的CF服务器基于对datasourceconnection-pool customization依赖Spring Cloud Connector的观点。

由于我们故意这样做是为了利用库提供的自动化功能,因此我们没有直接能力在SCDF本身中将其关闭。

但是,有一个选项可以完全关闭Spring Cloud Connector,而该选项可作为Spring Boot属性(即spring.cloud=false)使用,该属性也适用于SCDF。

在CF服务器上设置此属性后,您就可以使用SPRING_DATASOURCE_*属性来创建连接池,例如上面manifest.yml中的定义。

更新

背景:声明性datasource覆盖和Spring Cloud Connector(在类路径中)是互斥的,并且不能以任何容量一起使用。

因此,自定义CF服务器时,建议坚持使用单一模型。当然,在这种情况下,最简单的解决方案是完全禁用连接器。