22

Grailsを使用すると、DataSources.groovyファイルでさまざまな環境(開発、テスト、本番)のデータソースを非常に簡単に構成できますが、1つの環境で複数のデータソースを構成する機能はないようです。同じGrailsアプリケーションから複数のデータベースにアクセスする必要がある場合はどうすればよいですか?

4

6 に答える 6

26

Grails 2.xx では、異なるドメイン クラスの異なるデータベースを接続するのは非常に簡単です。

例えば

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 {

    }
}

ドメインクラスで任意のデータソースを使用できます

class Role{
   static mapping = {
      datasource 'users'
   }
}

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

詳細については、これを見てください

于 2013-02-15T12:41:17.440 に答える
20

Grails 2.0 以降を使用している場合、プラグインは必要なく、ネイティブでサポートされています。

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

于 2012-02-03T23:47:30.373 に答える
9

Grails の GORM レイヤーで複数のデータソースを直接使用できるようにする Grails プラグインがあります: http://burtbeckwith.com/blog/?p=70

于 2008-09-08T18:27:50.487 に答える
2

Grails 2.0 は、プラグインなしで複数のデータ ソースを処理できます。

dev(h2 dataSource) および test(mysql dataSource_mysql) 環境の異なるデータソースの例:

DataSource.groovy:

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"
            }
        }
    }
}
于 2012-08-22T14:27:47.330 に答える
1

あなたは本当にこれをしたいですか?私の経験では、ここでの通常のシナリオは次のとおりです。

  1. アプリケーションは、独自のデータベース スキーマで独自のデータを管理します。
  2. 多くの場合、アプリケーションは他のソースからのデータを必要とします (たとえば、参照データをコピーして貼り付けることはできません)。

私は通常、すべてのスキーマが 1 つのデータベース インスタンスに存在するという贅沢を常に持っていました。したがって、私のアプリケーション:

  • データベース接続は 1 つだけです。これは、所有するスキーマへの接続であり、読み取り/書き込みアクセス権があります。
  • 他のアプリケーションは、ビューを介してデータを「エクスポート」します
  • 私のアプリケーションにはこれらのビューへの読み取りアクセス権があり、そのビューのシノニムがあり、ローカルに表示されます

ビューを使用する理由は、データを公開しているアプリケーションが

  1. エクスポートされていることと、何がエクスポートされているかを明示的に認識しています
  2. スキーマの内部構造を公開しません (したがって、内部構造が変更された場合、ビューが正しい限り、消費するアプリは知りません)

Grails アプリケーションで実際にこれを行う必要はありませんでしたが、このアプローチは機能するはずです。

アプリケーション間でデータを共有するもう 1 つの方法は、Web サービスを作成してデータを公開することです。Grails はこれを簡単にします。

お役に立てば幸いですが、このアプローチがすべての状況に適用できるとは限りません。

于 2011-02-07T06:29:56.157 に答える
-1

次の投稿は、このテーマに関する最良の情報源のようです。

grailsでmutli-dataSourceを取得する方法

要約すると、次のようになります。

  • DevelopmentDataSourceでdatasource1を定義します
  • resources.xmlでdatasource2を定義します
  • datasource2を使用してドメインオブジェクトのCRUD用のDAOを作成します
  • hibernate.cfg.xmlで、すべてのドメインオブジェクトを一覧表示します。

最初のデータソースのみが動的ファインダーメソッドを持ちます。

本当に単純なクエリで、ORM機能がなくてもかまわない場合は、GroovySQLまたはHibernateのネイティブSQL機能を使用できます。

于 2008-09-04T08:01:27.190 に答える