Im Frühjahr JDBC-Modul haben wir so etwas wie AbstractRoutingDataSource
. Welche Sie basierend auf einigen Variablen ThreadLocal
implementieren können.
Von anderer Seite der JdbcPollingChannelAdapter
hat Code wie folgt:
private Object poll() {
List<?> payload = doPoll(this.sqlQueryParameterSource);
...
executeUpdateQuery(payload);
return payload;
}
Also, sollten Sie irgendwie zwischen doPoll()
und executeUpdateQuery
und daher ändern Sie den Schlüssel in der ThreadLocal
in einzuhaken zum anderen wechseln zu können, DataSource
in der AbstractRoutingDataSource
.
Ich nur den Hack wie benutzerdefinierte sqlParameterSourceFactory.createParameterSource()
und die ThreadLocal
Modifikation dort. Nur weil der Code wie:
private void executeUpdateQuery(Object obj) {
SqlParameterSource updateParamaterSource = this.sqlParameterSourceFactory.createParameterSource(obj);
this.jdbcOperations.update(this.updateSql, updateParamaterSource);
}
(Wird das Update für updateParamaterSource
Typo bald :-) begehen).
Aber! Wie Gary in seiner Antwort erwähnt, wäre es besser, mehrere JDBC-Adapter für verschiedene DataSource
s zu haben: einen für SELECT
und einen weiteren für UPDATE
. Beide können in derselben XA-Transaktion arbeiten (<transactional>
auf der <poller>
). Und von da unterscheiden wir wirklich die Geschäftslogik und das Verantwortungsniveau.
Hallo Gary _ Ich sehe Sie Punkt, können Sie mir bitte helfen, das unten zu verstehen ....
1. Ich muss für IDs (mehr als 1) aus Datenquelle A auswählen.
2. Dann muss ich diese IDs übergeben, um Abfrage 2 mit Dsource B auswählen.
3. Schließlich die Ausgabe von Punkt 2, ich habe für die Aktualisierung mit Datsource verwenden A – Gaurav
Versuchen Sie nicht, Logik in Kommentare zu setzen, tut es nicht mach es nicht gut. Bearbeite stattdessen die Frage. Sie benötigen 'jcbc-inbound-adapter-> jdbc-outbound-gateway-> jdbc-outbound-adapter' mit allen erforderlichen Transformatoren dazwischen. –