Vielen Dank für das Lesen.Spring: separate Datenquelle für schreibgeschützte Transaktionen
Ich habe 2 MySQL-Datenbanken - Master für schreibt, Slave für liest. Das perfekte Szenario, das ich mir vorstelle, ist, dass meine App Verbindung zum Master für readOnly=false
Transaktionen, Slave für readOnly=true
Transaktionen verwendet.
Um dies zu implementieren, muss ich eine gültige Verbindung abhängig von der Art der aktuellen Transaktion bereitstellen. Meine Data-Service-Schicht sollte nicht wissen, welche Art von Verbindung es verwendet und nur die injizierten SqlMapClient
(ich verwende iBatis) direkt verwenden. Dies bedeutet, dass (wenn ich es richtig verstanden habe) die injizierten SqlMapClient
s Proxy und der Delegat sollte zur Laufzeit gewählt werden.
public class MyDataService {
private SqlMapClient sqlMap;
@Autowired
public MyDataService (SqlMapClient sqlMap) {
this.sqlMap = sqlMap;
}
@Transactional(readOnly = true)
public MyData getSomeData() {
// an instance of sqlMap connected to slave should be used
}
@Transactional(readOnly = false)
public void saveMyData(MyData myData) {
// an instance of sqlMap connected to master should be used
}
}
Die Frage ist also - wie kann ich das tun?
Vielen Dank
Gibt es einen einfacheren Weg mit AspectJ zum Beispiel? – artemb
@artemb: Ich bin sicher, AspectJ würde helfen, aber es wird immer noch nicht einfach sein. – skaffman