我試圖找到一種方法來配置一個駱駝端點,它使用一個spring bean,它在駱駝上下文中從路由中的端點聲明引用,但它不起作用。替代長URI來配置Spring Bean的駱駝端點?
例如,有時使用多個參數定義端點URI非常可怕(!!),那麼使用bean及其屬性配置端點會更容易。 (或者甚至更好的是,當用XML配置端點時,或者元素應該有像常規bean那樣的子元素,我們可以在其中配置端點的參數)。
下面的第一種方法運作良好,非常標準,非常簡單。第二種方法是我想要使用的方法,但它不起作用。我嘗試了許多變化,但沒有成功!事實上,下面的第三種選擇對駱駝開發者來說只是一個有趣的提議,但它也說明了我的觀點。
在我下面的示例中,我只爲文件端點配置了3個參數,但想象一下帶有10個參數的URI!我的問題是如何讓我的第二種方法正常工作,我確定有一個簡單的解決方案!?我也試過使用一個工廠bean和一個工廠方法,但它沒有工作。
1)配置XML駱駝端點(春豆)標準方式:
...
<camel:camelContext id="camelContext" >
<camel:route id="deviceDataLogsPoller" >
<camel:from uri="file://long/path/to/input?preMove=../inprogress&move=../done&moveFailed=../error" />
<camel:log message="Input device data file read from file in input folder {{im.filePoller.folder.input}}." loggingLevel="INFO" />
</camel:route>
</camel:camelContext>
2)的替代方案,我預計會的Valide但不工作(對我來說):
<bean id="filePoller" class="org.apache.camel.component.file.FileEndpoint" >
<property name="camelContext" ref="camelContext" />
<property name="localWorkDirectory" value="/long/path/to/input" />
<property name="preMove" value="../inprogress" />
<property name="move" value="../done" />
<property name="moveFailed" value="../error" />
...
</bean>
...
<camel:camelContext id="camelContext" >
<camel:route id="deviceDataLogsPoller" >
<camel:from ref="filePoller" />
<camel:log message="Input device data file read from file in input folder {{im.filePoller.folder.input}}." loggingLevel="INFO" />
</camel:route>
</camel:camelContext>
3)替代,這將是在未來的有趣上述兩個備選方案)之間(混合:
...
<camel:route id="deviceDataLogsPoller" >
<camel:from uri="file://long/path/to/input" >
<property name="preMove" value="../inprogress" />
<property name="move" value="../done" />
<property name="moveFailed" value="../error" />
...
</camel:from>
<camel:log message="Input device data file read from file in input folder {{im.filePoller.folder.input}}." loggingLevel="INFO" />
</camel:route>
</camel:camelContext>
是的,這是行得通的,但是此刻您添加了一些屬性來設置參數,它們並不總是以正確的方式工作,或者如同它們被指定爲URI參數一樣。例如,如果我使用'move'屬性和一個SimpleExpression類型的bean作爲值(而不是字符串)來指定'move'參數,那麼一切都會啓動,但輸入文件夾中的文件不能移動到'移動'文件夾,因爲它期待一個文件而不是一個文件夾(顯然,根據異常消息)。 – The4Summers 2014-10-03 15:55:13
@ The4Summers你是對的,它不以同樣的方式工作。我添加了一個'moveExpression'示例來展示如何正確處理這個問題。 – 2014-10-03 18:33:08
是的,我可以使它工作,但這種方法終究比簡單地使用URI更加複雜和繁重!有一種方法來配置端點會更有趣,就像我在上面第三種替代方法中提出的那樣。也許如果我有時間,我會嘗試創建我自己的「from」和「to」標籤,它們將通過從params元素構造完整的URI來包裝現有的標籤...!我也可以向駱駝開發者提出這個建議。謝謝。 – The4Summers 2014-10-03 18:40:40