3

したがって、datasource.groovy ファイルでさまざまな環境設定を作成できます。そして、このように環境ノードの外に共通設定を置くことができます

dataSource {
   pooled = false
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = ""
}
environments {
    development {
        dataSource {
            dbCreate = "create-drop"
           url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

しかし、開発者 (この場合は Omar と Stringer) 間で共有セットを持つなど、特定の環境でいくつかのプロパティを共有し、他の環境で別のプロパティ セットを共有できるようにする方法はありますか?

dev_dataSource {
   pooled = false
   driverClassName = "oracle.jdbc.driver.OracleDriver"
   username = "dev"
   password = "dev"
}
dataSource {
   pooled = true
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = "something"
}
environments {
    omar {
        dataSource {
            dev_dataSource {
                url = "jdbc:oracle:thin:@omardb.wire.com:1521:devl"
            }
        }
    }
    stringer {
        dataSource {
            dev_dataSource {
                url = "jdbc:oracle:thin:@stringerdb.wire.com:1521:devl"
            }
        }
    }
    devint {
        dataSource {
            dbCreate = "create-drop"
            url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

前もって感謝します...

4

3 に答える 3

3

@Sergioのアプローチに加えて、次のコマンドに従ってdatasource使用することを想定して、開発中に各ユーザーに期待どおりに使用することもできます。run-app

grails -Dgrails.env=omar run-app //uses Omar's datasource
grails -Dgrails.env=stringer run-app //uses Stringer's datasource

更新
アクセスするためにデータソースを調整する方法は、datasource_devここでは少し注意が必要です。ConfigSlurper が ConfigObject を読み取る方法に注意する必要があります。

dataSource_dev {
   pooled = false
   driverClassName = "oracle.jdbc.driver.OracleDriver"
   username = "dev"
   password = "dev"
}
dataSource {
   pooled = true
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = "something"
}
environments {
    omar {
        //You do not need this if you only want to use dev's datasource 
        //dataSource { 
            dataSource_dev {
                url = "jdbc:oracle:thin:@omardb.wire.com:1521:devl"
            }
        //}
    }
    stringer {
        //You do not need this if you only want to use dev's datasource
        //dataSource {
            dataSource_dev {
                url = "jdbc:oracle:thin:@stringerdb.wire.com:1521:devl"
            }
        //}
    }
    devint {
        dataSource {
            dbCreate = "create-drop"
            url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

上記のセットアップに基づいて、environment のデフォルト プロパティを非常にうまく継承できdatasource_devますomar

Grails は上記の構成を変換/読み取り、最終的には次のようになります。

[
    dataSource_dev: [
        pooled: false,
        driverClassName: "oracle.jdbc.driver.OracleDriver",
        username: "dev",
        password: "dev",
        url: "jdbc:oracle:thin:@omardb.wire.com:1521:devl"  //<-- Omar's setting
    ],
    dataSource: [
        pooled: true,
        driverClassName: "org.h2.Driver",
        username: "sa",
        password: "something"
    ]
]
于 2013-08-21T19:59:02.767 に答える
0

以下のようにクロージャーを使用してこれを行うことができます。

devDataSourceConfig = { // Note the equals sign!
   pooled = false
   driverClassName = "oracle.jdbc.driver.OracleDriver"
   username = "dev"
   password = "dev"
}
standardDataSourceConfig = {
   pooled = true
   driverClassName = "org.h2.Driver"
   username = "sa"
   password = "something"
}

environments {
    omar {
        dataSource {
            devDataSourceConfig.call()
            url = "jdbc:oracle:thin:@omardb.wire.com:1521:devl"
        }
    }
    stringer {
        dataSource {
            devDataSourceConfig.call()
            url = "jdbc:oracle:thin:@stringerdb.wire.com:1521:devl"
        }
    }
    devint {
        dataSource {
            standardDataSourceConfig.call()
            dbCreate = "create-drop"
            url = "jdbc:h2:mem:devDb"
        }
    }
    test {
        dataSource {
            standardDataSourceConfig.call() 
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb"
        }
    }
    production {
        dataSource {
            standardDataSourceConfig.call()
            dbCreate = "update"
            url = "jdbc:h2:prodDb"
        }
    }
}

SO hereに関する同様の質問。

于 2019-05-17T10:21:43.937 に答える