Спасибо за чтение.
У меня есть 2 базы данных MySQL - master для записи, slave для чтения.Идеальный сценарий, который я представляю, состоит в том, что мое приложение использует соединение с мастером для readOnly=false
транзакций, подчиненное для readOnly=true
транзакций.
Для реализации этого мне необходимо предоставить действительное соединение в зависимости от типа текущегосделка.Мой уровень обслуживания данных не должен знать, какой тип соединения он использует, и просто использует введенный SqlMapClient
(я использую iBatis) напрямую.Это означает, что (если я правильно понял) введенные SqlMapClient
s должны быть проксированы, а делегат должен быть выбран во время выполнения.
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
}
}
Итак, вопрос - как я могу это сделать?
Большое спасибо