编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Grails指南17配置之多数据源(guns多数据源配置)

wxchong 2024-10-05 02:12:46 开源技术 18 ℃ 0 评论

默认情况下,所有模型共享一个数据源或者说是一个数据库,但是实际上你完全可以为不同的模型指定不同的数据源。

默认的配置是在grails-app/conf/application.yml中,看起来是这样的:

dataSource:

pooled: true

jmxExport: true

driverClassName: org.h2.Driver

username: sa

password:

environments:

development:

dataSource:

dbCreate: create-drop

url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

test:

dataSource:

dbCreate: update

url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

production:

dataSource:

dbCreate: update

url: jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

properties:

jmxEnabled: true

initialSize: 5

#########################################

为了配置其它数据源,你需要用到dataSources关键字,注意这是dataSource的复数形式,具体实现是这样的:

dataSource:

pooled: true

jmxExport: true

driverClassName: org.h2.Driver

username: sa

password:

dataSources:

lookup:

dialect: org.hibernate.dialect.MySQLInnoDBDialect

driverClassName: com.mysql.jdbc.Driver

username: lookup

password: secret

url: jdbc:mysql://localhost/lookup

dbCreate: update

environments:

development:

dataSources:

dataSource:

dbCreate: create-drop

url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

test:

dataSources:

dataSource:

dbCreate: update

url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

production:

dataSources:

dataSource:

dbCreate: update

url: jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

properties:

jmxEnabled: true

initialSize: 5

...

lookup:

dialect: org.hibernate.dialect.Oracle10gDialect

driverClassName: oracle.jdbc.driver.OracleDriver

username: lookup

password: secret

url: jdbc:oracle:thin:@localhost:1521:lookup

dbCreate: update

#########################################

简单说明一下,environments外部的配置是数据库默认配置,environments内部的配置是针对不同启动环境的指定配置。environments内部的配置,相对于其外部配置而言,优先级更高,即在内外部同时被配置的情况下,将使用内部的配置。一般情况下,environments外部的默认配置应写在environments之前。dataSource(无s)用于配置默认数据源,dataSources(有s)用于配置额外数据源。注意,代码中的lookup为自己随便定义的名,用于指代此数据源。题外话,你也可以使用依赖注入的方式去使用lookup数据源,代码如下:DataSource dataSource_lookup

#########################################

关于模型的配置,如果一个模型(domain)中没有数据源配置,则使用默认数据源'dataSource'。如果想指定数据源,则应该mapping中设置datasource属性为数据库名,如lookup,具体实现方法如下:

class ZipCode {

String code

static mapping = {

datasource 'lookup'

}

}

#########################################

一个模型可以两个或更多的数据源,关键字是datasources,具体实现方法如下:

class ZipCode {

String code

static mapping = {

datasources(['lookup', 'lookdown'])

}

}

#########################################

可用关键字'DEFAULT'指代默认数据源,例子如下:

class ZipCode {

String code

static mapping = {

datasources(['lookup', 'DEFAULT'])

}

}

#########################################

可用关键字'ALL'指代所有数据源,例子如下:

class ZipCode {

String code

static mapping = {

datasource 'ALL'

}

}

#########################################

模型中的命名空间,datasources(['lookup', 'lookdown'])中,第一个数据源是默认数据源,即lookup。

class ZipCode {

String code

static mapping = {

datasources(['lookup', 'lookdown'])

}

}

lookup,lookdown是数据源的别名,也可称其为命名空间,具体使用方法如下:

def zipCode = ZipCode.lookdown.get(1)

...

zipCode.lookdown.save()

#########################################

在事务中指定数据源,例子如下:

class DataService {

static datasource = 'lookup'

void someMethod(...) {

...

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表