Настройка
У меня есть приложение, использующее Spring 4.3, JdbcTemplate, Hibernate 5 и MySQL 8. Я реализовал многопользовательский режим в режиме гибернации для каждой схемы, где я переключаю схемы, используя механизм многопользовательского режима Hibernates -MultiTenantConnectionProvider
и делать там в основном:
connection.createStatement().execute("USE " + databaseNamePrefix + tenantIdentifier);
и это работает.
Теперь в отчетной части моего приложения для запросов к БД используется JdbcTemplate
.И теперь я хочу аналогичным образом перед каждым запросом, выполняемым JdbcTemplate, выдавать этот оператор USE tenantIdentifier
.
Вопрос
Как я могу добавить какой-либо SQL или оператор к каждому запросу, выполняемому JdbcTemplate?
Что я пробовал
Я посмотрел на JdbcTemplate, и единственное, что я нашел, это установить NativeJdbcExtractor
.Я попробовал приведенный ниже код, но он даже не регистрируется, что он использует эти методы.
@Bean
@DependsOn("dataSource")
public JdbcTemplate jdbcTemplate() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource());
jdbcTemplate.setNativeJdbcExtractor(new SimpleNativeJdbcExtractor(){
@Override
public Connection getNativeConnection(Connection con) throws SQLException {
LOGGER.info("getNativeConnection");
System.out.println("aaa");
return super.getNativeConnection(con);
}
@Override
public Connection getNativeConnectionFromStatement(Statement stmt) throws SQLException {
System.out.println("aaa");
LOGGER.info("getNativeConnectionFromStatement");
return super.getNativeConnectionFromStatement(stmt);
}
});
return jdbcTemplate;
}
Добавлен запрос функции в Spring: https://jira.spring.io/browse/SPR-17342
РЕДАКТИРОВАТЬ: я посмотрел на Spring 5и они удалили JdbcExtractor, так что это определенно неправильный путь.