I может ошибаться из-за (строгой) необходимости иметь один SessionFactory
на базу данных, как предлагают некоторые ресурсы:
Мне понадобится время, чтобы перечитать все завтра (я не получилвсе детали, если честно) и чтобы полностью понять последствия такой настройки (хотя кажется очевидным, что она сломает кэш второго уровня).Я вернусь к этому позже.
Я пишу веб-приложение, которое поддерживает несколько пользователей.Каждый пользователь имеет свою собственную базу данных - используя H2.все схемы баз данных одинаковы.
Интересно, как это будет масштабироваться ... Сколько у вас пользователей?Как вы запускаете H2, в каком режиме?
Итак, я застрял в том, как связать базу данных пользователя с этим пользователем - может быть, связать ее в HTTPSession и расширить SpringRoutingDataSource?
У вас будетпостроить SessionFactory
для каждого пользователя и связать его с зарегистрированным пользователем (в Map
, используя логин в качестве ключа), а затем получить Session
из заданного SessionFactory
.Привязка жизненного цикла SessionFactory
к сеансу HTTP кажется хорошей идеей (для экономии памяти), но я не уверен, что Spring будет здесь очень полезен.Я могу ошибаться, но вариант класса HibernateUtil
и полностью программный подход выглядят проще.Кстати, я не уверен, что вам понадобится несколько подключений для каждого пользователя.
но не скажется ли это на кеше Hibernate?
Какой кеш?
Другим способом является создание SessionFactory для каждого источника данных, даже если схема каждого источника данных одинакова ... поэтому я вижу это как пустую трата.
О,это пустая трата времени, но это то, что вы хотите сделать (одна база данных на пользователя).И у вас нет выбора (вам нужен один SessionFactory
на базу данных).Зачем вам нужна одна база данных на пользователя?Вы уверены, что это мудрое решение?Как уже упоминалось, это означает, что много проблем, плохое масштабирование, сложность и т. Д. Почему бы не использовать единую базу данных и не связывать данные с пользователем?
В любом случае выбор источника данных должен быть динамичным- они не могут быть предварительно сконфигурированы в контекстных файлах, поскольку у каждого нового пользователя будет создана собственная база данных.Существуют ли какие-либо фреймворки / решения?
Мне не известно.Именно поэтому я думаю, что вам придется делать все программно.
Я не слишком много знаю об осколках гибернации, может, это работает?
Учитываядинамические потребности вашего приложения, я не понимаю, как это могло бы помочь.