繁体   English   中英

如何使用 java-cfenv-boot 自动配置数据源

[英]How to autoconfigure datasource using java-cfenv-boot

根据我收集的信息(参见此处),将 java-cfenv-boot 添加为 maven 依赖项应该会自动配置云代工厂部署的可用数据源。 但是,在部署时,它无法找到所需的参数。

应用程序能够以字符串形式访问 vcap.services 数据,该字符串可以使用 CfJdbcEnv 进行解析。 但是如果我尝试访问属性文件中的数据,我只能直接访问vcap.services ,而不能访问单个服务数据,即vcap.services.<service-label>数据不可用。

我是否需要向 pom 或属性添加任何其他内容以使用环境数据自动配置数据源?

不是个别服务数据,即 vcap.services。 数据不可用。

在属性或 YAML Spring 引导配置文件中, vcap.services.<foo>属性由 Spring 引导本身设置,而不是 java-cfenv 库。

请参阅CloudFoundryVcapEnvironmentPostProcessor

如果它们没有设置,那么我的第一个想法是后处理器没有运行。 这看起来很奇怪,您可能想查看您的应用程序中发生了什么,但是,这并不是绝对必要的。

您可以使用 java-cfenv 获取属性。 为此,您需要创建一个CfEnv bean,然后您可以使用 SPeL 来使用 bean 来访问配置文件中的属性。

  1. 创建 bean:

     @Bean public CfEnv cfEnv() { return new CfEnv(); }

    或者,对于 JDBC,您可以创建一个更方便的CfJdbcEnv

     @Bean public CfJdbcEnv cfJdbcEnv() { return new CfJdbcEnv(); }
  2. 使用 SPeL 表达式来调用 bean。

    使用CfJdbcEnv示例

    spring.datasource.url=#{ cfJdbcEnv.findJdbcService().getUrl() }

    以及使用CfEnv的示例。

     spring.datasource.username=#{ cfEnv.findCredentialsByTag('my-db').get('username') }

参考文档: https://github.com/pivotal-cf/java-cfenv/#use-with-spring

我是否需要向 pom 或属性添加任何其他内容以使用环境数据自动配置数据源?

对于常见的属性,我上面提到的甚至都不是必需的。 例如,应该自动设置spring.datasource.url属性。

CfDataSourceEnvironmentPostProcessor设置 Spring 引导属性spring.datasource.url 不过,这也是一个后处理器,并且由于您似乎在使用后处理器时遇到了问题,因此CloudFoundryVcapEnvironmentPostProcessor似乎也无法正常工作,这可能是您的问题的原因。

参考文档: https://github.com/pivotal-cf/java-cfenv/#using-spring-boot

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM