1

是否有一种优雅的方法可以在运行时配置 aGrailsDomainClass以在运行时使用 DataSource 或 Connection?理想情况下,这可以简单地使用内存中的 H2 实例。

这是我的用例示例。我正在编写一个 grails 服务,该服务需要将 HQL 语法与域对象一起使用来执行一些复杂的数据库计算。我希望它可以使用隔离的内存 H2 实例与每个线程同时运行。

实现这一目标的最佳方法是什么?我知道动态数据源路由可能是一个起点,但是如何在 Grails 中优雅地实现呢?我需要避免在配置文件中设置实例,因为内存中的 H2 实例需要即时创建。

我现在就在这一点上,但不确定如何配置域对象以使用此连接。

def ds = new JdbcDataSource()
ds.setURL("jdbc:h2:mem:dw_1;MVCC=TRUE;LOCK_TIMEOUT=10000;INIT=CREATE SCHEMA IF NOT EXISTS dw_1")
ds.setUser("sa")
ds.setPassword("sa")
def conn = ds.getConnection()

亲切的问候,

4

2 回答 2

0

从理论上讲,您可以尝试在配置中设置其他数据源并配置域类以使用多个数据源 ,并在运行时更改该额外内存数据源的连接设置,或者不更改设置但在使用前清除它或按计划清除,或者不完全清楚。备案:我自己还没有使用过这个功能。

于 2013-09-09T16:07:22.600 回答
-1

解决此问题的一种快速方法是在 DataSource.groovy 中创建一个新数据源,如下所示:

dataSource_example {
    dbCreate = ""
    dialect = "..."
    driverClassName = "..."
    url = "your_db_url"
    username = "your_username"
    password = "your_password"
    pooled = true
    properties {
        ....
    }
}

然后在你的GrailsDomainClass

public GrailsDomainClass {

    static mapping = {
        datasource "example"
        table name: "grails_domain_class", schema: "schema_one"
    }
}
于 2017-04-27T18:06:58.957 回答