Grails 2 wiele dynamicznych źródeł danych w usługach

Pracuję nad aplikacją Grails, w której muszę uzyskać dostęp do kilku źródeł danych. Źródła danych są zdefiniowane w domyślnej bazie danych (tzn. Są tam przechowywane i muszę wywołać domyślną bazę danych, aby pobrać listę nazw źródeł danych, które muszę przygotować do połączenia). Po uruchomieniu serwera pobieram listę baz danych, tworzę fasolę źródła danych i wstrzykuję je. Wszystkie dynamicznie dodawane bazy danych są strukturalnie identyczne (tj. Mają taką samą strukturę obiektu tabeli i domeny).

To pytanie jest najbliżej do użytecznego fragmentu kodu, ale nie do końca jest to, czego potrzebuję.

Problem 1Kiedy rejestruję fasolę źródła danych, pojawiają się tam, gdzie oczekuję, ale Grails ich nie odbiera.

Tak je dodam:

// 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

To drukuje:

[dataSource, dataSourceUnproxied, dataSource_devDB1]

Gdy to zrobię, mogę wykonywać operacje na domyślnym źródle danych i tyle.

Numer 2Jeśli zadeklaruję wszystkie moje źródła danych jako częśćDatasource.groovy plik, wtedy mogę wykonywać operacje na wszystkich moich bazach danych, ale niejak reklamowano w dokumentacji

Działa, gdy wykonuję mapowanie statyczne na obiektach mojej domeny:

static mapping = {datasources(['devDB1', 'devDB2', 'DEFAULT')] or datasource = 'ALL'

ale chcę wykonać to wszystko w ramach usługi i zadeklarować obiekty domeny do korzystania ze WSZYSTKICH źródeł danych.

Deklarowanie źródła danych w usłudze nie działa:

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
  }
}

Zawsze użyje domyślnego źródła danych bez względu na wszystko. Jedynym momentem, w którym używa poprawnego źródła danych, jest to, że na obiekcie domeny wymieniam dane źródło danych.

Czy ktoś ma:

próbowałeś dodać dynamiczne źródła danych i udało się?

przełączane między źródłami danych za pomocą usług Grails?

(i byłoby to fantastycznym dodatkiem, jako „wisienka na szczycie”) odniosło sukces przy użyciu wielu źródeł danych z wiosennym rdzeniem bezpieczeństwa? Jak zmienić źródło danych dla wtyczki bezpieczeństwa?

Dzięki

-

questionAnswers(3)

yourAnswerToTheQuestion