Используйте PhysicalNamingStrategy для базовых источников данных AbstractRoutingDataSource.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Используйте PhysicalNamingStrategy для базовых источников данных AbstractRoutingDataSource.

Сообщение Anonymous »

Я использую Spring-Boot с PhysicalNamingStrategy от Hibernate вместе с AbstractRoutingDataSource из Spring и MS SQL Server. Цель состоит в том, чтобы обеспечить динамическое переключение схемы для разных арендаторов. Поскольку MS SQL не поддерживает настройку схемы в драйвере jdbc, мне нужно решение для генерации сценариев SQL, в которых имя схемы является частью имени таблицы в качестве префикса, но динамически зависит от текущего TenantId, который хранится как ThreadLocal в реализации AbstractRoutingDataSource. .

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

   @Bean
public CamelCaseToUnderscoresNamingStrategy myPhysicalNamingStrategy(MyDataSourceRouter dataSourceRouter) {

return new CamelCaseToUnderscoresNamingStrategy() {

@Override
public Identifier toPhysicalSchemaName(Identifier logicalName, JdbcEnvironment jdbcEnvironment) {

// read schema here either from jdbcEnvironment datasource of from thread local variable of the dataSourceRouter.
return Identifier.toIdentifier(dataSourceRouter.getCurrentSchema());
}
};
}
К сожалению, имя физической схемы инициализируется только один раз при запуске и только для источника данных по умолчанию для AbstractRoutingDataSource, а не для их базовых источников данных.
Я также попробовал использовать описанные решения из этого весеннего блога: [https://spring.io/blog/2022/07/31/how-t ... pplication].
Но поскольку MS SQL не поддерживает «setSchema» для объектов DataSource или Connection, ни один из этих подходов не является решением. Поэтому MultiTenantConnectionProvider не является решением для MS SQL.
Как я могу «научить» PhysicalNamingStragtegy работать вместе с AbstractRoutingDataSource? Похоже, PhysicalNamingStragtegy применяется только к defaultDataSource из AbstractRoutingDataSource

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

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

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

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

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

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