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

时间:2013-09-09 14:59:11

标签: grails dynamic groovy runtime datasource

在运行时,是否有一种优雅的方法可以将GrailsDomainClass配置为在运行时使用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()

亲切的问候,

2 个答案:

答案 0 :(得分:0)

理论上,您可以尝试在config中设置其他数据源并配置域类以使用multiple datasources,并在运行时更改该附加内存数据源的连接设置,或者不要更改设置,但在使用或清除之前将其清除预定的基础,或根本不清楚。 记录:我自己还没有使用过这个功能。

答案 1 :(得分:-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"
    }
}
相关问题