AbstractRoutingDataSource не меняет соединениеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 AbstractRoutingDataSource не меняет соединение

Сообщение Anonymous »

Я использую AbstractRoutingDataSource для динамического изменения источника данных и ThreadLocal для настройки currentLookupKey. Это хорошо работает, когда я использую только один источник данных для каждого http-запроса. Я использую JpaRepository

Код: Выделить всё

@Component
@Primary
public class RoutingDataSource extends AbstractRoutingDataSource {

@Autowired
private DatabaseMap databaseMap;

@Override
public void afterPropertiesSet() {
setTargetDataSources(databaseMap.getSourcesMap());
setDefaultTargetDataSource(databaseMap.getSourcesMap().get("DEFAULT"));
super.afterPropertiesSet();
}

@Override
protected Object determineCurrentLookupKey() {
return DatabaseContextHolder.getDatabaseType();
}

}

public class DatabaseContextHolder {

private static final ThreadLocal contextHolder = new ThreadLocal();

public static void setDatabaseType(String string) {
contextHolder.set(string);
}

public static String getDatabaseType() {
return (String) contextHolder.get();
}

public static void clearDatabaseType() {
contextHolder.remove();
}
}
Когда я пытаюсь получить данные в свой REST-контроллер, я получаю данные только из одной базы данных.

Некоторый код в моем контроллере REST

Код: Выделить всё

DatabaseContextHolder.setDatabaseType("db1");
//here I get data from db1 as expected
//I use JpaRepository
DatabaseContextHolder.clearDatabaseType();
DatabaseContextHolder.setDatabaseType("db2");
//here I should get data from db2 but get from db1
Я пытался выполнить отладку, и похоже, что Spring получает источник данных только один раз в http-запросе.

Этот метод вызывается только один раз.

Код: Выделить всё

@Override
public Connection getConnection() throws SQLException {
return determineTargetDataSource().getConnection();
}
Есть ли способ заставить Spring изменить источник данных.

Подробнее здесь: https://stackoverflow.com/questions/375 ... connection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»