簡體   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