在运行时将Grails DataSource动态设置为内存中的H2实例

在运行时将Grails DataSource动态设置为内存中的H2实例,grails,dynamic,groovy,runtime,datasource,Grails,Dynamic,Groovy,Runtime,Datasource,是否有一种在运行时配置GrailDomainClass以在运行时使用数据源或连接的优雅方法?理想情况下,这可以简单地使用内存中的H2实例 下面是我的用例示例。我正在编写一个grails服务,它需要对域对象使用HQL语法,以形成一些复杂的数据库计算。我希望它能够使用一个独立的内存H2实例与每个线程并发运行 实现这一目标的最佳方式是什么?我知道动态数据源路由可能是一个起点,但如何在Grails中优雅地实现它呢?我需要避免在配置文件中设置实例,因为内存中的H2实例需要动态创建 我现在正处于这一点上,但

是否有一种在运行时配置GrailDomainClass以在运行时使用数据源或连接的优雅方法?理想情况下,这可以简单地使用内存中的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()

善意的问候,

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

解决这个问题的一个快速方法是在datasource.groovy中创建一个新的datasource,如下所示:

dataSource_example {
    dbCreate = ""
    dialect = "..."
    driverClassName = "..."
    url = "your_db_url"
    username = "your_username"
    password = "your_password"
    pooled = true
    properties {
        ....
    }
}
然后在GrailDomainClass中:


这听起来似乎有道理,但我该如何更改现有数据源的url呢?e、 g.如果我定义了它,我如何检索它只是为了更改url?所以我认为您可以在运行时修改文件。所以没有办法动态创建数据源,然后将所述数据源附加到grails GORM域类?@ThomasFarvour我刚刚偶然发现了这个问题。你找到解决这个问题的办法了吗?你解决这个问题的方法是什么?有没有其他人对这可能如何实现有什么想法?你可能想看看这个:你怎么能把它看成是动态数据源?这只是一个到附加数据源的映射…就像问题中所问的,我现在就在这里,但不确定如何配置域对象以使用此连接。这正是我所回答的,如何配置域类以使用不同的数据源。您可以使用MySQL或Cassandra或任何您喜欢的其他域和您需要的域中的H2。我看到不同的问题解释。。。
public GrailsDomainClass {

    static mapping = {
        datasource "example"
        table name: "grails_domain_class", schema: "schema_one"
    }
}