热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Grails-从不同的数据源获取数据并将其保存在Grails数据库中

如何解决《Grails-从不同的数据源获取数据并将其保存在Grails数据库中》经验,为你挑选了1个好方法。

我有一个Grails项目,需要从一个在不同项目上运行的数据库中检索数据.这个其他项目在不同的平台(Drupal)上运行,并且具有不同的域.我只需要阅读这个数据库中的一些表,并将其保存在我自己的数据源中.

实现这一目标的最佳方法是什么?



1> Burt Beckwit..:

最快的方法是使用GORM 对多个数据源的支持,这些数据源旨在用于在两个或多个数据库之间对域类进行分区,但是您不必为此第二个数据源分配任何数据源.一个小的缺点是,这样做会创建一个额外的事务管理器,Hibernate会话工厂,以及更多的类和Spring bean,但是如果没有任何使用它们,它们将不会占用太多内存.为此dataSource,DataSource.groovy使用唯一后缀添加第二个块(它不会影响除Spring bean名称之外的任何内容),例如

dataSource_drupal {
   pooled = true
   driverClassName = '...'
   username = '...'
   password = '...'
   url = '...'
}

由于此数据源不会用于GORM,因此您无需指定dialect,dbCreate或者jmxExport您不需要第二个hibernate块,只需要创建连接池所需的信息(默认情况下它将创建10个初始连接) ).

如果你担心这种方法的额外内存(你不应该,它将是最小的)你可以做更多的工作并手动注册一个Spring bean grails-app/conf/spring/resources.groovy.如果您使用的是最新版本的Grails,则数据源实现是Tomcat JDBC连接池,因此请使用其驱动程序类和setter属性名来指定连接信息.使用任何有效的Spring bean名称,但我会遵循多个数据源支持的约定:

import org.apache.tomcat.jdbc.pool.DataSource

beans = {

   dataSource_drupal(DataSource) { bean ->
        bean.destroyMethod = 'close'

        driverClassName = '...'
        url = '...'
        username = '...'
        password = '...'

        // optional extra settings, not really needed
        // unless you expect a lot of usage
        initialSize = 42
        testOnBorrow= true
        testWhileIdle = false
        testOnReturn= false
        validatiOnQuery= 'SELECT 1'
   }
}

因此,要使用您的第二个数据源,依赖项 - 将其注入您将用于执行数据迁移工作的服务:

def dataSource_drupal

并且要进行SQL查询,最好的办法是groovy.sql.Sql,它可以很好地隐藏大部分涉及JDBC代码的仪式.添加导入

import groovy.sql.Sql

并创建一个新的实例将DataSourcebean 传递给它的构造函数,以便它可以使用它来获取连接:

Sql sql = new Sql(dataSource_drupal)
sql.eachRow('select name, bar from foo' ) { row ->
   Foo foo = new Foo(name: row.name, bar: row.bar)
   if (!foo.save()) {
       log.error "Validation error(s) for data $row: $foo.errors"
   }
}


推荐阅读
author-avatar
手机用户282914901
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有