Grazie per aver letto questo.Spring: origine dati separata per transazioni di sola lettura
Ho 2 database MySQL: master per scritture, slave per letture. Lo scenario perfetto che immagino è che la mia app utilizzi la connessione al master per le transazioni readOnly=false
, slave per le transazioni readOnly=true
.
Per implementare questo ho bisogno di fornire una connessione valida a seconda del tipo di transazione corrente. Il mio livello di servizio dati non dovrebbe sapere quale tipo di connessione utilizza e usare solo l'iniettato SqlMapClient
(io uso iBatis) direttamente. Ciò significa che (se ho capito bene) gli iniettati SqlMapClient
devono essere inoltrati e il delegato deve essere scelto in fase di runtime.
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
}
}
Quindi la domanda è: come posso fare questo?
Grazie mille
C'è un modo più semplice con AspectJ per esempio? – artemb
@artemb: Sono sicuro che AspectJ sarebbe stato d'aiuto, ma non sarà ancora facile. – skaffman