我有一個應用程序已經使用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>
所以我有一些問題:
- 難道我補充說, 「應用程序」。所有我現有的物業?
- 有什麼辦法可以爲我的應用程序在SCDF中提供類似「--spring.config.location」的東西嗎?
- 如果我已經在application.yml中提供了「spring.application.name」屬性,它如何影響SCDF,因爲在定義流時我還提供了一個應用程序名稱?
- 如果我已經在application.yml中提供了「server.port」屬性,它如何影響SCDF? SCDF會選擇它作爲應用程序使用的端口,還是會忽略它?
在此先感謝您的支持。
關於最後一個問題,我的application.yml中的屬性被SCDF明確覆蓋。但是,即使在application.yml文件中設置_app.myappp.server.port_,它也不會被拾取。例如,我使用--properties「app.myapp.server.port = 8081」進行部署時,工作的唯一方式就是使用它。任何線索? –
application.yml在屬性解析層次結構中的優先級最低。你可以檢查應用程序中是否有其他地方'server.port'設置? –
我已經找到了原因:所有的屬性也必須作爲字符串提供;否則他們簡單地被忽略。我不知道爲什麼這種行爲是故意的,所以我在這裏發佈了另一個問題 - > https://stackoverflow.com/questions/44267286/app-properties-in-spring-cloud-data-flow-application –