Я работаю над приложением Grails, где должен получить доступ к нескольким источникам данных. Источники данных определены в базе данных по умолчанию (т.е. Они хранятся там, и я должен сделать вызов базы данных по умолчанию, чтобы получить список имен источников данных, которые я должен подготовить для подключения). Когда сервер загружается, я извлекаю список баз данных, создаю datasource beans и вводим их. Все динамически добавленные базы данных структурно идентичны (т.е. Имеют одну и ту же структуру таблиц и доменных объектов).
Этот вопрос является самым близким, который я получил к полезному фрагменту кода, но это не совсем то, что мне нужно.
Проблема № 1
- Когда я регистрирую источник данных beans, они появляются там, где я ожидаю, но Grails их не забирает.
Вот как я их добавляю:
// Register datasource bean
def beanName = 'dataSource_devDB1'
BeanBuilder bb = new BeanBuilder()
bb.beans {
"${beanName}"(BasicDataSource) {
url = "jdbc:h2:devDB1Db;MVCC=TRUE"
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
}
}
bb.registerBeans(grailsApplication.mainContext)
// check that it registered
def ctx = grailsApplication.mainContext
def ctxlist = ctx2.beanDefinitionNames.findAll{it.contains( 'dataSource' )}
log.info "ctxlist = " + ctxlist
Отпечатки:
[dataSource, dataSourceUnproxied, dataSource_devDB1]
Когда я это делаю, я могу выполнять операции с источником данных по умолчанию и что он.
Проблема №2
- Если я объявляю все свои источники данных как часть файла
Datasource.groovy
, тогда я могу выполнять операции во всех моих базах данных, но не как рекламируется документация
Он работает, если я статично сопоставляю объекты моего домена:
static mapping = {datasources(['devDB1', 'devDB2', 'DEFAULT')] or datasource = 'ALL'
но я хочу выполнить все это как часть сервиса и объявить объекты моего домена использовать ВСЕ источники данных.
Объявление источника данных в службе не работает:
class secureDBService{
static datasource = "devDB1"
def readWriteMethod(){
.....
// this always uses the default datasource ignoring the static property above.
// the only time it uses devDB1 is if I declare it as part of the domain datasource
// mapping
}
}
Это всегда будет использовать источник данных по умолчанию, несмотря ни на что. Единственный раз, когда он использует правильный источник данных, является то, что на объекте домена я перечисляю соответствующий источник данных.
Итак, есть кто-нибудь:
-
попытался добавить динамические источники данных и преуспеть?
-
переключается между источниками данных с использованием сервисов grails?
-
(и это было бы фантастическим дополнением, так как "вишня сверху" ) имела успех с использованием нескольких источников данных с spring ядром безопасности? Как переключить источник данных для плагина безопасности?
Спасибо
-