【问题标题】:Grails: can i switch case database urlGrails:我可以切换案例数据库网址吗
【发布时间】:2012-06-23 06:49:30
【问题描述】:

我怎样才能在 Grails 2.0.4 中做这样的事情?

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

我不想使用多租户核心插件

【问题讨论】:

  • 嗯,成功了吗?如果没有,为什么不呢?
  • 我不认为你可以在运行时以这种方式连接到任意数据库。你的闭包也不会被每个传入的请求调用。

标签: database grails datasource


【解决方案1】:

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()

您还可以将数据源自动连接到您的服务或控制器中并直接使用它们。

【讨论】:

  • 嗨@krock,感谢您的回答。如果我有 10 个域并且每个域有 10 个查询,您能否建议我是否必须使用 Domain."$company".findAll() 100 次,有没有更简单的方法?
  • findAll() 只是在指定数据源后能够使用标准 gorm 静态方法的示例。您应该使用 findBy、criteria 或 HQL 查询来检索相关数据。如果您总是检索相同的不变数据,您还应该考虑缓存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多