如何在Grails中访问两个数据库

如何在Grails中访问两个数据库

How do you access two databases in Grails

Grails可以在其DataSources.groovy文件中非常轻松地为不同环境(开发,测试,生产)配置数据源,但是似乎没有在一个环境中配置多个数据源的功能。 如果我需要从同一个Grails应用程序访问多个数据库,该怎么办?


在Grails 2.x.x中,连接不同域类中的不同数据库非常容易。

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
development {
    dataSource {//DEFAULT data source
      .
      .
    }
dataSource_admin { //Convention is dataSource_name
        url ="//db url"
        driverClassName ="oracle.jdbc.driver.OracleDriver"
        username ="test"
        password = 'test123'
    }
dataSource_users {

    }
}

您可以通过以下方式使用域类中的任何数据源:

1
2
3
4
5
6
7
8
9
10
11
class Role{
   static mapping = {
      datasource 'users'
   }
}

 class Product{
    static mapping = {
      datasource 'admin'
   }
 }

有关更多详细信息,请参见此


如果使用Grails 2.0或更高版本,则不需要插件,它本身受支持。

http://www.grails.org/doc/latest/guide/single.html#multipleDatasources


现在有了Grails插件,可以直接在Grails的GORM层中使用多个数据源:

A Grails Plugin for Multiple DataSources


Grails 2.0无需插件即可处理多个数据源:

针对dev(h2 dataSource)和test(mysql dataSource_mysql)环境使用不同数据源的示例:

DataSource.groovy:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
dataSource {
    pooled = true
    driverClassName ="org.h2.Driver"
    username ="sa"
    password =""
}
dataSource_mysql {
    dialect = org.hibernate.dialect.MySQLInnoDBDialect
    driverClassName = 'com.mysql.jdbc.Driver'
    username ="user"
    password ="pass"
    url ="jdbc:mysql://mysqldb.com/DBNAME"
}
hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}

// environment specific settings
environments {
    development {
        dataSource {
            configClass = HibernateFilterDomainConfiguration.class
            dbCreate ="update" // one of 'create', 'create-drop', 'update', 'validate', ''
            url ="jdbc:h2:file:../devDb;MVCC=TRUE"
            sqlLogging = true
        }
    }
    test {
        dataSource_mysql {
            configClass = HibernateFilterDomainConfiguration.class
            dbCreate ="create" // one of 'create', 'create-drop', 'update', 'validate', ''
            sqlLogging = true
        }
    }
    production {
        dataSource {
            dbCreate ="update"
            url ="jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
            pooled = true
            properties {
               maxActive = -1
               minEvictableIdleTimeMillis=1800000
               timeBetweenEvictionRunsMillis=1800000
               numTestsPerEvictionRun=3
               testOnBorrow=true
               testWhileIdle=true
               testOnReturn=true
               validationQuery="SELECT 1"
            }
        }
    }
}

您真的要这样做吗?以我的经验,通常的情况是:

  • 应用程序在自己的数据库架构中管理自己的数据
  • 通常,应用程序将需要来自其他来源的数据(例如,因此参考数据不会被复制和粘贴)
  • 通常,在一个数据库实例上驻留的所有模式通常都很豪华。因此,我的应用程序:

    • 仅具有一个数据库连接-这是它拥有的模式并且具有读/写访问权限
    • 其他应用程序通过视图"导出"其数据
    • 我的应用程序具有对这些视图的读取访问权限,并且具有该视图的同义词,从而使其在本地显示

    使用视图的原因是为了使正在公开数据的应用程序

  • 明确知道它正在导出以及正在导出什么
  • 不会公开架构的内部结构(因此,如果内部结构发生更改,只要视图正确,那么消耗应用程序就不会知道)
  • 实际上,我不需要使用Grails应用程序来执行此操作,但是该方法应该可行。

    跨应用程序共享数据的另一种方法是创建一个Web服务来公开数据。 Grails使这变得容易。

    希望能有所帮助,但是这种方法可能不适用于所有情况。


    以下帖子似乎是有关此主题的最佳信息来源:

    如何在grails中获取mutli-dataSource

    归结为:

    • 在DevelopmentDataSource中定义datasource1
    • 在resources.xml中定义datasource2
    • 使用datasource2为域对象的CRUD编写DAO
    • 在hibernate.cfg.xml中,列出所有域对象。

    只有第一个数据源将具有动态查找器方法。

    如果您的查询非常简单,并且不介意没有ORM功能,则可以使用Groovy SQL或Hibernate的本机SQL功能。


    推荐阅读

      学习写字楼新选择6000元主流配置

      学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

      酷睿I7 配置

      酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

      鼠标不能拖动文件了

      鼠标不能拖动文件了,鼠标,拖动,本文目录鼠标不能拖动文件了电脑鼠标无法拖动软件图标了,怎么办鼠标不能滚动怎么调整电脑鼠标不能进行任何

      提高3A四核羿龙II游戏配置的性能

      提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

      苹果电脑如何连接和使用扫描仪

      苹果电脑如何连接和使用扫描仪,,扫描仪的使用 用苹果扫描图像。 连接扫描仪:在打开苹果电脑之前,你需要连接扫描仪和安装扫描仪驱动程序。扫

      opporeno8参数配置及价格

      opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

      查看配置:酷睿i3530集展示办公平台

      查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

      3500元超额值学生娱乐结构的优化配置

      3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机