2016-04-20 96 views

回答

2

你不能;兩個操作都使用相同的JdbcTemplate;您可以省略更新查詢並在出站通道適配器上執行更新。

+0

嗨加里_我明白你的意思,請你幫我理解下面的內容....
1.我必須從數據源A中選擇ID(超過1)。
2.然後我必須通過這些ID來選擇查詢2使用數據源B.
3.最後的點2的輸出,我必須利用數據源更新A – Gaurav

+0

不要試圖把邏輯放在註釋中,它不會嘗試沒有好的表現。改爲編輯問題。你需要使用'jcbc-inbound-adapter-> jdbc-outbound-gateway-> jdbc-oubound-adapter'以及兩者之間的必要變換器。 –

0

在Spring JDBC模塊中,我們有類似於AbstractRoutingDataSource的東西。 你可以根據一些ThreadLocal變量來實現。

從對方JdbcPollingChannelAdapter有這樣的代碼:

private Object poll() { 
    List<?> payload = doPoll(this.sqlQueryParameterSource); 
    ... 
    executeUpdateQuery(payload); 

    return payload; 
} 

所以,你應該以某種方式掛接在doPoll()executeUpdateQuery之間,因此,更改ThreadLocal的鍵就可以切換到另一個DataSourceAbstractRoutingDataSource中。

我只有自定義sqlParameterSourceFactory.createParameterSource()ThreadLocal修改那裏的黑客。只是因爲代碼是這樣的:

private void executeUpdateQuery(Object obj) { 
    SqlParameterSource updateParamaterSource = this.sqlParameterSourceFactory.createParameterSource(obj); 
    this.jdbcOperations.update(this.updateSql, updateParamaterSource); 
} 

(將提交修補updateParamaterSource錯字:-))。

但是!正如Gary在他的回答中所提到的,最好有幾個JDBC適配器用於不同的DataSource s:一個用於SELECT,另一個用於UPDATE。他們兩人都可以在同一個XA交易中工作(<transactional>,<poller>)。從那裏我們真正區分業務邏輯和責任級別。

相關問題