0

我有一個應用程序已經使用Spring雲流(SCS)實現了3個組件:1個源@EnableBinding(Source.class),1個處理器@EnableBinding(Processor.class )和1個接收器@EnableBinding(Sink.class),我使用Apache Kafka綁定器進行通信。在Spring雲數據流中部署現有的Spring Cloud Stream應用程序

至於這些組件配置的一部分,我使用的是從春天的雲流,幾個屬性,如主題使用,分區數量,串行器,最大民意調查等:

spring: 
    application: 
    name: myapp 

    cloud: 
    stream: 
     bindings: 
     output: 
      destination: topic1 
      producer: 
      partitionCount: 5 
      partitionKeyExpression: headers.kafka_messageKey 
     kafka: 
     binder: 
      brokers: 10.138.128.62 
      defaultBrokerPort: 9092 
      zkNodes: 10.138.128.62 
      defaultZkPort: 2181 
      requiredAcks: -1 
      replicationFactor: 1 
      autoCreateTopics: true 
      autoAddPartitions: true 
     bindings: 
      output: 
      producer: 
       configuration: 
       key.serializer: org.apache.kafka.common.serialization.StringSerializer 
       value.serializer: org.apache.kafka.common.serialization.ByteArraySerializer 

所有這些特性都在予指示在執行元件時的外部文件「application.yml」定義爲:

java -jar mycomponent.jar --spring.config.location=/conf/application.yml 

目前,我協調那些3個分量「手動」,但我想使用Spring雲數據流(SCDF)創建一個strea並能夠更好地操作它們。

基於SCDF文檔,任何SCS應用程序都可以直接用作要在流中定義的應用程序。除此之外,應用程序的屬性可以通過外部屬性文件提供。不過,我提供我的'application.yml的屬性文件,它不工作:

stream deploy --name mystream --definition "mysource | myprocessor | mysink' --deploy --propertiesFile /conf/application.yml 

經過一番研究,我意識到,文檔指出的任何應用程序的任何財產必須以這種格式進行傳遞:

app.<app-name>.<property-name>=<value> 

所以我有一些問題:

  1. 難道我補充說, 「應用程序」。所有我現有的物業?
  2. 有什麼辦法可以爲我的應用程序在SCDF中提供類似「--spring.config.location」的東西嗎?
  3. 如果我已經在application.yml中提供了「spring.application.name」屬性,它如何影響SCDF,因爲在定義流時我還提供了一個應用程序名稱?
  4. 如果我已經在application.yml中提供了「server.port」屬性,它如何影響SCDF? SCDF會選擇它作爲應用程序使用的端口,還是會忽略它?

在此先感謝您的支持。

回答

1

我必須添加該「應用程序」。所有我現有的物業?

是的。你可以有這樣的事情:

app: app-name: spring: cloud: ...

有什麼辦法,我可以提供類似「--spring.config.location」我在新加坡民防部隊的應用程序?

對於部署的流,只有--propertiesFile可以在運行時提供屬性。但是,你仍然可以使用應用程序特定的屬性,如:

stream deploy mystream --properties "app.*.spring.config.location=configFile" 或不同configFiles用於與app.app-name前綴的每一個應用程序。

這樣,所有部署的應用程序都會獲得這些屬性。

如果我已經提供了在application.yml一個「spring.application.name」屬性,它是如何影響新加坡民防部隊,我定義流時也提供了一個應用程序的名稱?

您是否出於某種原因在您的應用程序中明確使用了spring.application.name。我想如果你改變了spring.application.name,那麼在度量收集器中會有一些影響。

如果我已經在application.yml中提供了「server.port」屬性,它如何影響SCDF? SCDF會選擇它作爲應用程序使用的端口,還是會忽略它?

它的工作方式與Spring Boot屬性源優先級相同。您應用程序的application.yml中的server.port將優先於可通過流定義/部署屬性設置的其他屬性源。

+0

關於最後一個問題,我的application.yml中的屬性被SCDF明確覆蓋。但是,即使在application.yml文件中設置_app.myappp.server.port_,它也不會被拾取。例如,我使用--properties「app.myapp.server.port = 8081」進行部署時,工作的唯一方式就是使用它。任何線索? –

+0

application.yml在屬性解析層次結構中的優先級最低。你可以檢查應用程序中是否有其他地方'server.port'設置? –

+0

我已經找到了原因:所有的屬性也必須作爲字符串提供;否則他們簡單地被忽略。我不知道爲什麼這種行爲是故意的,所以我在這裏發佈了另一個問題 - > https://stackoverflow.com/questions/44267286/app-properties-in-spring-cloud-data-flow-application –

相關問題