2012-06-23 6 views
1

Как я могу это сделать в Grails 2.0.4?Grails: могу ли я переключить базу данных базы данных?

dataSource { 

     dbCreate = "create-drop" 
     String host = request.getServerName() 
     switch(host) { 
      case "company1.com": url = "jdbc:mysql://localhost/db1" 
      case "company2.com": url = "jdbc:mysql://localhost/db2" 
      default: null 
     } 
} 

я не хочу использовать многопользовательскую-Core Plugin

+0

Ну, это сработало? Если нет, почему бы и нет? –

+0

Я не думаю, что вы можете подключиться к произвольным базам данных во время выполнения таким образом .. ни ваше закрытие не будет вызвано для каждого входящего запроса. –

ответ

4

Grails 2 поддерживает multiple datasources поэтому вы должны настроить два отдельных источника данных, и пусть ваш сервис домена слой/сделать переключение между ними:

dataSource_company1 { 
    dbCreate = "create-drop" 
    url = "jdbc:mysql://localhost/db1" 
} 
dataSource_company2 { 
    dbCreate = "create-drop" 
    url = "jdbc:mysql://localhost/db2" 
} 

Затем настройте ваши объекты домена для поддержки как:

class Foo { 
    static mapping = { 
     datasources(['company1', 'company2']) 
    } 
    // ... 
} 

Тогда, наконец, использование источника данных на основе запроса:

def company = request.serverName.split('.')[0] 
def fooThings = Foo."$company".findAll() 

Вы также можете autowire источников данных в ваши услуги или контроллеры и использовать их непосредственно.

+0

Привет, @krock, спасибо за ваш ответ. Может ли вы предложить мне в случае , если у меня есть 10 доменов и 10 запросов в области 1 ли я использовать домен. «$ Компании» .findAll() 100 раз есть ли способ, что проще? –

+0

findAll() был всего лишь примером возможности использования стандартных статических методов gorm после указания источника данных. Вы должны использовать findBy, критерии или запросы HQL для получения соответствующих данных. Вы также должны учитывать кеширование, если вы всегда извлекаете одни и те же неизменные данные. – krock

Смежные вопросы