Spring: separate Datenquelle für schreibgeschützte Transaktionen

8

Danke für das Lesen.

Ich habe 2 MySQL-Datenbanken - Master für Schreibvorgänge, Slave für Lesevorgänge. Das perfekte Szenario, das ich mir vorstelle, ist, dass meine App die Verbindung zum Master für readOnly=false transactions, den Slave für readOnly=true transactions verwendet.

Um dies zu implementieren, muss ich eine gültige Verbindung abhängig vom Typ der aktuellen Transaktion bereitstellen. Meine Data-Service-Schicht sollte nicht wissen, welche Art von Verbindung verwendet wird und nur die injected SqlMapClient (ich verwende iBatis) direkt verwenden. Dies bedeutet, dass (wenn ich es richtig verstanden habe) die injected SqlMapClient s proxied sein sollte und der Delegat zur Laufzeit ausgewählt werden sollte.

%Vor%

Die Frage ist also - wie kann ich das machen?

Vielen Dank

    
artemb 19.07.2010, 12:25
quelle

1 Antwort

4

Es ist eine interessante Idee, aber Sie würden einen harten Job in Ihren Händen haben. Das readOnly -Attribut dient als Hinweis für den Transaktionsmanager und wird nirgendwo sinnvoll konsultiert. Sie müssten mehrere Spring-Infrastrukturklassen neu schreiben oder erweitern.

Wenn Sie also nicht die Absicht haben, das zu erreichen, was Sie wollen, ist es wahrscheinlich die beste Option, zwei separate SqlMapClient -Objekte in Ihr DAO zu injizieren und die entsprechenden Methoden auszuwählen. Die @Transactional -Anmerkungen müssten auch angeben, welcher Transaktionsmanager verwendet werden soll (vorausgesetzt, Sie verwenden DataSourceTransactionManager anstatt JpaTransactionManager ), wobei darauf zu achten ist, dass der Transaktionsmanager dem von DataSource verwendeten SqlMapClient entspricht.

    
skaffman 19.07.2010, 12:42
quelle

Tags und Links