使用: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 服务器与不驻留在基础中的数据源绑定?
Spring CloudData Flow的CF服务器建立在依靠Spring Cloud Connector进行datasource
和连接池自定义的观点之上。
由于我们有意这样做是为了利用库提供的自动化,因此我们无法直接在 SCDF 本身中关闭它。
但是,有一个选项可以完全关闭Spring Cloud Connector的干扰,该选项可用作Spring Boot属性(即spring.cloud=false
(,这也适用于SCDF。
在 CF 服务器上设置此属性后,您将能够使用SPRING_DATASOURCE_*
属性创建连接池,就像上面manifest.yml
中定义的那样。
更新
背景:声明性datasource
覆盖和 Spring Cloud Connector(在类路径中(是互斥的,它们不能以任何身份协同工作。
因此,建议在定制 CF 服务器时坚持使用单个模型。当然,在这种情况下,最简单的解决方案是完全禁用连接器。