example - grails tutorial
¿Cómo se accede a dos bases de datos en Grails? (6)
¿Realmente quieres hacer esto? En mi experiencia, el escenario habitual aquí es:
- Una aplicación administra sus propios datos en su propio esquema de base de datos
- A menudo, la aplicación requerirá datos de otras fuentes (por ejemplo, para que los datos de referencia no se copien y peguen)
Normalmente siempre he tenido el lujo de todos los esquemas que residen en la única instancia de base de datos. Por lo tanto, mi aplicación:
- solo tiene una conexión de base de datos, que corresponde al esquema que posee y tiene acceso de lectura / escritura
- las otras aplicaciones ''exportan'' sus datos a través de vistas
- mi aplicación tiene acceso de lectura a esas vistas, y tiene un sinónimo para esa vista que hace que parezca local
La razón detrás del uso de vistas es que la aplicación que está exponiendo los datos
- sabe explícitamente que se está exportando y qué se está exportando
- no expone la estructura interna del esquema (por lo tanto, si la estructura interna cambia, siempre que la vista sea correcta, las aplicaciones que lo consumen no lo saben)
No he tenido que hacer esto con una aplicación de Grails, pero el enfoque debería funcionar.
Otro enfoque para compartir datos entre aplicaciones es crear un servicio web para exponer los datos. Grails lo hace fácil.
Espero que ayude, pero este enfoque puede no ser aplicable en todas las situaciones.
Grails hace que sea muy fácil configurar las fuentes de datos para diferentes entornos (desarrollo, prueba, producción) en su archivo DataSources.groovy, pero parece que no hay ninguna posibilidad para configurar múltiples fuentes de datos en un entorno. ¿Qué debo hacer si necesito acceder a varias bases de datos desde la misma aplicación Grails?
Ahora hay un complemento de Grails que permite el uso de múltiples fuentes de datos directamente con la capa GORM de Grails: http://burtbeckwith.com/blog/?p=70
Conectar diferentes bases de datos en diferentes clases de dominio es muy fácil en Grails 2.xx
por ejemplo
development {
dataSource {//DEFAULT data source
.
.
}
dataSource_admin { //Convention is dataSource_name
url = "//db url"
driverClassName = "oracle.jdbc.driver.OracleDriver"
username = "test"
password = ''test123''
}
dataSource_users {
}
}
Puede usar cualquier fuente de datos en sus clases de dominio por
class Role{
static mapping = {
datasource ''users''
}
}
class Product{
static mapping = {
datasource ''admin''
}
}
Grails 2.0 puede manejar múltiples fuentes de datos sin un plugin:
Ejemplo con un origen de datos diferente para los entornos dev (h2 dataSource) y test (mysql dataSource_mysql):
DataSource.groovy:
dataSource {
pooled = true
driverClassName = "org.h2.Driver"
username = "sa"
password = ""
}
dataSource_mysql {
dialect = org.hibernate.dialect.MySQLInnoDBDialect
driverClassName = ''com.mysql.jdbc.Driver''
username = "user"
password = "pass"
url = "jdbc:mysql://mysqldb.com/DBNAME"
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = ''net.sf.ehcache.hibernate.EhCacheRegionFactory''
}
// environment specific settings
environments {
development {
dataSource {
configClass = HibernateFilterDomainConfiguration.class
dbCreate = "update" // one of ''create'', ''create-drop'', ''update'', ''validate'', ''''
url = "jdbc:h2:file:../devDb;MVCC=TRUE"
sqlLogging = true
}
}
test {
dataSource_mysql {
configClass = HibernateFilterDomainConfiguration.class
dbCreate = "create" // one of ''create'', ''create-drop'', ''update'', ''validate'', ''''
sqlLogging = true
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
pooled = true
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
}
}
}
La siguiente publicación parece ser la mejor fuente de información sobre el tema:
Cómo obtener mutli-dataSource en griales
Se reduce a:
- Definir datasource1 en DevelopmentDataSource
- Definir datasource2 en resources.xml
- Escribir un DAO para CRUD de los objetos de dominio utilizando datasource2
- En hibernate.cfg.xml, liste todos los objetos de dominio.
Solo el primer origen de datos tendrá métodos dinámicos de búsqueda.
Si lo que busca es una consulta realmente simple y no le molesta tener las características de ORM, puede usar Groovy SQL o las características SQL nativas de Hibernate.
Si usa Grails 2.0 o superior, no hay necesidad del complemento, es compatible de forma nativa.
http://www.grails.org/doc/latest/guide/single.html#multipleDatasources