Я решил похожую проблему. Я реализовал свой собственный TenantAwareDataSource
на основе AbstractDataSource
Spring. Требуется tenantId от bean-объекта в области сеанса с именем tenantContext . Этот компонент обновляется каждый раз при обработке входящего запроса. Это делается с помощью фильтра безопасности Spring Security:
<security:http auto-config='false' >
<security:custom-filter before="FIRST" ref="tenantFilter" />
<!-- ...more security stuff... -->
</security:http>
My TenantAwareDataSource
инициализируется во время запуска, но это не имеет значения, поскольку оно создано пустым - оно содержит нет источников данных арендатора (например, объединенные источники данных JDBC или менеджер сущностей JPA). Они создаются лениво, когда getConnection()
вызывается впервые для выбранного арендатора.
Итак, мой TenantAwareDataSource
поддерживает свою собственную динамическую карту источника данных, в то время как AbstractRoutingDataSource
ожидает статической инициализации карты источника данных, выполненной во время запуска.
Подробнее читайте в этой статье .