簡體   English   中英

如何在 Spring Cloud Data Flow 任務中外部化應用程序屬性

[英]How to externalize application properties in Spring Cloud Data Flow taks

我目前有一個常規的 SpringBoot 應用程序,我將其拆分為 2 個應用程序,以便從 Spring Cloud Dataflow 和 Spring Batch 中獲得一些好處:

  1. 一個 SpringBoot 應用程序,負責檢測特定事件並通過 Spring Cloud Dataflow REST API啟動新的 Batch 任務
  2. 一個 SpringBoot + Spring Batch 任務將從我們 Nexus 上的 jar 注冊到 SCDF 並輪詢新事件。

我已經讓這兩個應用程序都在運行,我開始四處移動。 現在我擔心的是,這個批處理應用程序有一個application.yml文件,其中包含可以(不應該,但可以)經常更新的數據源和其他重要屬性。

在我目前的方法中,我的應用程序被打包在一個 Docker 容器中,我啟動我的應用程序,說明最終的application.yml文件在哪里。 這允許我在每個環境中有一個特定的.yml文件,因為我不允許在這里使用 Spring Profiles 來組織每個 env 的變量。 開發人員不應該知道 Prod 變量。

這是我的 Dockerfile 的入口點:

ENTRYPOINT ["java","-Dspring.profiles.active=docker","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar", "--spring.config.location=classpath:/application.yml,file:/tmp/config/application.yml"]

使用這種新的 SCDF 任務方法來保持我的屬性文件外部化的最佳方法是什么? 我應該去 Spring Cloud Config 嗎? --spring.config.location作為作業參數傳遞是否真的有效?

記住我上面提到的限制,Spring Cloud 仍然可以作為一種可能的解決方案來解決嗎?

在此先感謝您的幫助!

最好的問候,

恩里科

肯定 Spring Cloud Config Server 將是一個不錯的選擇,特別是考慮到您提到的數據源包含密碼和您應該保護的其他潛在密鑰/秘密。 使用配置服務器,您不僅可以將配置外部化,還可以安全地存儲它們,因為它允許您使用對稱和非對稱算法加密屬性,請參見此處:

spring cloud config加解密

另一方面,在您的application.yml擁有這些屬性意味着這些密碼/密鑰/秘密最終會在您的控制版本系統中(希望不能從您組織的網絡外部訪問)。

另一種選擇是將您的配置保留在配置文件中並僅將敏感信息外部化。 在我的組織中,我們將 HashiCorp Vault 與 Spring Cloud Config 結合使用。

金庫

如果您的組織中沒有部署現有的 Vault,並且您發現維護額外服務的工作量對您或您的團隊來說太高,那么 Spring Cloud Config 服務器應該足夠好。

關於: I'm not allowed here to use Spring Profiles to organize variables per env. Devs shouldn't be able to know Prod vars I'm not allowed here to use Spring Profiles to organize variables per env. Devs shouldn't be able to know Prod vars 我認為這是在代碼中包含屬性的直接結果,通常有一些(如果不是大部分)在不同應用程序之間共享的配置最終導致配置地獄,特別是如果您必須輪換密碼或密鑰。 外部化將允許 Devs 訪問非生產環境配置,而 Ops 處理生產環境配置,因此每個人都很高興。 即使使用 Vault 開發人員也可以“知道”prod env Vault 路徑,但無法訪問它。

您可以將 kubernetes configmap 用於 spring 雲任務和 spring 批處理。 如果您在 Kubernetes 上部署 Spring Cloud 數據流。 您可以將以下依賴項添加到您的雲任務和春季批次中。

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
</dependency>

現在您需要將以下引導程序 yaml 屬性添加到您的應用程序中。

spring:
  cloud:
    kubernetes:
      enabled: true
      config:
        enabled: true
        namespace: <namespace>
        name: <config map 1>
        namespace: <kubernetes namespace>
        sources:
        - name: <config map 1>
        - name: <config map 2>
      reload:
        enabled: true
        strategy: refresh

您需要提及命名空間值。 如果您要根據環境隔離屬性,請提及您正在使用的命名空間。 您還可以指定配置映射名稱。

在此處閱讀更多相關信息。 https://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/index.html#kubernetes-propertysource-implementations

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM