Multiple Data Sources
You need to use one more layer called dataSources
←– with s
in your application.yml file.
Example (For Application.YML)
Assume using MS SQL Server 2012. You need to replace *
with your own data. In this example, we have the default dataSource
, and an additional data source otherSource
. We will talk about how to select the which data source in the domain in the next section. We only focus on setting up the development environment here, but we have to somehow provide some fake config in the test, and production environments, or the project cannot be build/run.
dataSources: dataSource: pooled: true jmxExport: true username: ******** password: ******** driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver otherSource: dialect: org.hibernate.dialect.SQLServer2012Dialect driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver pooled: true jmxExport: true username: ******** password: ******** url: jdbc:sqlserver://********:1433;databaseName=********;charset=utf8;useUnicode=yes&characterEncoding=UTF-8 dbCreate: none environments: development: dataSources: dataSource: logSql: true dbCreate: none dialect: org.hibernate.dialect.SQLServer2012Dialect url: jdbc:sqlserver://********:1433;databaseName=********;charset=utf8;useUnicode=yes&characterEncoding=UTF-8 properties: jmxEnabled: true initialSize: 5 maxActive: 50 minIdle: 5 maxIdle: 25 maxWait: 10000 maxAge: 600000 timeBetweenEvictionRunsMillis: 5000 minEvictableIdleTimeMillis: 60000 validationQuery: SELECT 1 validationQueryTimeout: 3 validationInterval: 15000 testOnBorrow: true testWhileIdle: true testOnReturn: false jdbcInterceptors: ConnectionState defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED otherSource: properties: jmxEnabled: true initialSize: 5 maxActive: 50 minIdle: 5 maxIdle: 25 maxWait: 10000 maxAge: 600000 timeBetweenEvictionRunsMillis: 5000 minEvictableIdleTimeMillis: 60000 validationQuery: SELECT 1 validationQueryTimeout: 3 validationInterval: 15000 testOnBorrow: true testWhileIdle: true testOnReturn: false jdbcInterceptors: ConnectionState defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED test: dataSources: dataSource: dbCreate: update url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE otherSource: dbCreate: update url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE production: dataSources: dataSource: jndiName: "java:/********" logSql: false dbCreate: none otherSource: dbCreate: update url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
By now, you might noticed that the config in the environments section, and the dataSources section is interchangeable, meaning that you can put the environment config in the dataSources config or the other way around.
Example (in Domain Object)
Just put the following code in your domain object, and it will automatically map to our new otherSource
. If we do not put anything datasource for the mapping, the domain will use the default one by default.
static mapping = { datasource 'otherSource' }