Spring Cloudfoundry 的云数据流服务器 - 外部数据源

Spring Cloud Data Flow Server for Cloudfoundry - external datasource

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

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

SQL 服务器数据库不是我们的 PCF 市场内提供的服务。我重建了服务器应用程序并将 SQL 服务器 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 服务器与不驻留在基金会内的数据源绑定?

Spring Cloud Data Flow 的 CF 服务器建立在 datasourceconnection-pool customization.

依赖 Spring Cloud Connector 的观点之上

由于我们有意这样做是为了利用图书馆提供的自动化功能,因此我们无法直接在 SCDF 中将其关闭。

但是,有一个选项可以完全关闭 Spring Cloud Connector 的干扰,并且该选项可用作 Spring 启动 属性(即 spring.cloud=false),这也适用于 SCDF。

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

更新

背景:声明性 datasource 覆盖和 Spring Cloud Connector(在类路径中)是相互排斥的,它们不能以任何身份一起工作。

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