Подключение к базам данных арендаторов в соответствии с логином пользователя с использованием Hibernate и Spring

Я читал мультиарендность в спящем режиме и пару сообщений из stackoverflow, но, похоже, они не отвечают моим требованиям, так что вот оно. Я работаю над моделью приложений на основе SAAS, в которой одно приложение обслуживается несколькими клиентами, и для каждого клиента будет независимый экземпляр базы данных арендатора (postgresSql). Помимо этого, у меня также есть основная база данных, которая будет использоваться для аутентификации пользователя и для определения того, к какой базе данных арендатора он принадлежит. Учтите, что эта главная база данных будет иметь такую ​​​​информацию, как URL-адрес подключения к базе данных арендатора.

Когда пользователь входит в систему, я аутентифицирую его с помощью главной базы данных, получаю информацию о базе данных арендатора, такую ​​​​как URL-адрес подключения, и подключаюсь к этой базе данных и обслуживаю все запросы пользователей через нее.

Учитывая тот факт, что я могу определить несколько сеансовых фабрик в файле конфигурации спящего режима, что сделает его статическим во время разработки приложения, вместо этого я хотел бы динамически создавать сеансовые фабрики для соответствующей базы данных арендатора, к которой принадлежит пользователь, читая информацию о соединении URL-адрес из основной базы данных.

Кроме того, также будет сценарий, в котором мне придется поддерживать sessionfactory основной базы данных и базы данных арендатора, поскольку будет требование, при котором мне придется добавлять пользователей как в основную базу данных, так и в базу данных арендатора во время создания пользователя.

Может ли кто-нибудь помочь решить это требование?


person Vinodborole    schedule 17.12.2013    source источник


Ответы (1)


Я бы определил две sessionfactory, одну для главной базы данных и одну для других баз данных, начиная с поддельных значений. это поможет вам изменить источник данных во время выполнения.

Наконец, threadlocal может помочь вам хранить данные между вызовами.

Надеюсь, поможет.

person Pirulino    schedule 19.05.2014