在运行时,是否有一种优雅的方法可以将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()
亲切的问候,
答案 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"
}
}