Gracias por leer esto.Spring: origen de datos separado para transacciones de solo lectura
Tengo 2 bases de datos MySQL: maestro para escrituras, esclavo para lecturas. El escenario perfecto que imagino es que mi aplicación utiliza la conexión al maestro para las transacciones readOnly=false
, esclavo para las transacciones readOnly=true
.
Para implementar esto, necesito proporcionar una conexión válida dependiendo del tipo de transacción actual. Mi capa de servicio de datos no debe saber qué tipo de conexión utiliza y simplemente usa el inyectado SqlMapClient
(yo uso iBatis) directamente. Esto significa que (si lo hago bien) se deben aproximar los SqlMapClient
s inyectados y se debe elegir el delegado en el tiempo de ejecución.
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
}
}
Entonces la pregunta es, ¿cómo puedo hacer esto?
Muchas gracias
¿Hay alguna manera más fácil con AspectJ, por ejemplo? – artemb
@artemb: Estoy seguro de que AspectJ me ayudaría, pero todavía no será fácil. – skaffman