Grails - переключение источников данных на основе пользователя

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

Однако Grails ожидает, что только один пул источников данных подключится к одной базе данных.

Мы хотим иметь возможность переключать соединения с базой данных для каждого сеанса на основе пользователя, вошедшего в систему, где различные соединения считываются из файлов свойств во время инициализации BootStrap ().

До сих пор мы не смогли найти решение, в котором, похоже, нет условий гонки, нет ни одного плагина, который мы можем найти, и это не кажется популярной проблемой.

Нашим самым многообещающим было создание собственного динамического источника данных, настроенного в Bootstrap для определения карты organization->dataSource, и использования замыкания, определенного в Bootstrap, для поиска подходящего источника данных перед поведением GORM, но, похоже, это вызывает состояние гонки, когда возникает задержка

У кого-нибудь есть идеи, как это переключение может быть законно выполнено?

Спасибо

2 ответа

Решение

В вашем вопросе неясно, будете ли вы один раз развертывать приложение и пытаться настроить DataSource используется пользователем, или если вы просто хотите настроить при развертывании.

Если это только для развертывания, Grails позволяет вам выводить конфигурацию наружу. Вы можете установить это, чтобы использовать файл в classpath или в статическом местоположении.

Учитывая, что Grails построен на основе Spring, вам лучше всего разработать собственный разрешимый источник данных.

  1. Динамическая маршрутизация источника данных
  2. Пример маршрутизации источника данных
Другие вопросы по тегам