Multiple data sources configuration

放肆的年华 提交于 2019-12-12 04:43:23

问题


I'm having trouble with the configuration of multiple DataSources in Grails 2.5.1. I'm using PostgreSQL 9.4.4, H2DB and hibernate 4.3.10 with GGTS. I'm getting the 'Table "XX" not found; SQL statement...' message and after a debug with the console, I found that the Session is returning the wrong driver:

import teste.PTes;

    PTes.withSession { hibernateSession ->
hibernateSession.getJdbcConnectionAccess().obtainConnection().getMetaData().getDriverName()
}

Result: H2 JDBC Driver

This domain class was supposed to run on a Session that uses the PostgreSQL driver. Here is the DataSource

    dataSource {
        pooled = true
        jmxExport = true
        driverClassName = "org.h2.Driver"

        username = "sa"
        password = ""
    }

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache=true
    cache.region.factory_class = 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory' // Hibernate 4
    }

// environment specific settings
environments {
    development {
         dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
            logSql = true
        }
        dataSource_teste {
            pooled = true
            dialect="org.hibernate.dialect.PostgreSQLDialect"
            driverClassName: 'org.postgresql.Driver'

            username: 'teste'
            password: 'teste'
            url: 'jdbc:postgresql://localhost:5432/teste'
            dbCreate: 'validate'
        }
    }
    test {
        dataSource {
            dbCreate = 'create-drop'
            url = "jdbc:postgresql://localhost:5432/teste;DB_CLOSE_ON_EXIT=FALSE"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
            properties {
               // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation
               jmxEnabled = true
               initialSize = 5
               maxActive = 50
               minIdle = 5
               maxIdle = 25
               maxWait = 10000
               maxAge = 10 * 60000
               timeBetweenEvictionRunsMillis = 5000
               minEvictableIdleTimeMillis = 60000
               validationQuery = "SELECT 1"
               validationQueryTimeout = 3
               validationInterval = 15000
               testOnBorrow = true
               testWhileIdle = true
               testOnReturn = false
               jdbcInterceptors = "ConnectionState"
               defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
            }
        }
        dataSource_teste {
            dialect: org.hibernate.dialect.PostgreSQL82Dialect
            driverClassName: 'org.postgresql.Driver'
            username: 'teste'
            password: 'teste'
            url: 'jdbc:postgresql://localhost:5432/teste;DB_CLOSE_ON_EXIT=FALSE'
            dbCreate: 'update'
        }
    }
}

Here is the BuildConfig:

    grails.servlet.version = "3.0" // Change depending on target container compliance (2.5 or 3.0)
grails.project.class.dir = "target/classes"
grails.project.test.class.dir = "target/test-classes"
grails.project.test.reports.dir = "target/test-reports"
grails.project.work.dir = "target/work"
grails.project.target.level = 1.6
grails.project.source.level = 1.6
//grails.project.war.file = "target/${appName}-${appVersion}.war"

grails.project.fork = [
    // configure settings for compilation JVM, note that if you alter the Groovy version forked compilation is required
    //  compile: [maxMemory: 256, minMemory: 64, debug: false, maxPerm: 256, daemon:true],

    // configure settings for the test-app JVM, uses the daemon by default
    test: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, daemon:true],
    // configure settings for the run-app JVM
    run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
    // configure settings for the run-war JVM
    war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
    // configure settings for the Console UI JVM
    console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256]
]

grails.project.dependency.resolver = "maven" // or ivy
grails.project.dependency.resolution = {
    // inherit Grails' default dependencies
    inherits("global") {
        // specify dependency exclusions here; for example, uncomment this to disable ehcache:
        // excludes 'ehcache'
    }
    log "error" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
    checksums true // Whether to verify checksums on resolve
    legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility

    repositories {
        inherits true // Whether to inherit repository definitions from plugins

        grailsPlugins()
        grailsHome()
        mavenLocal()
        grailsCentral()
        mavenCentral()
        // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
        //mavenRepo "http://repository.codehaus.org"
        mavenRepo "http://download.java.net/maven/2/"

        //repo for spring security
        mavenRepo "http://repo.spring.io/milestone/"
        //mavenRepo "http://repository.jboss.com/maven2/"
    }

    dependencies {
        // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.
        // runtime 'mysql:mysql-connector-java:5.1.29'
        runtime 'org.postgresql:postgresql:9.4-1201-jdbc4'
        test "org.grails:grails-datastore-test-support:1.0.2-grails-2.4"
    }

    plugins {
        // plugins for the build system only
        build ":tomcat:7.0.55.3" // or ":tomcat:8.0.22"

        // plugins for the compile step
        compile ":scaffolding:2.1.2"
        compile ':cache:1.1.8'
        // asset-pipeline 2.0+ requires Java 7, use version 1.9.x with Java 6
        compile ":asset-pipeline:2.2.3"
        compile ":quartz:1.0.2"
        compile ":joda-time:1.5"
        compile ":XXXXXXX-plugin:0.1-SNAPSHOT"

        // plugins needed at runtime but not for compilation
        runtime ":hibernate4:4.3.10"  // or ":hibernate:3.6.10.18"
        runtime ":database-migration:1.4.0"
        runtime ":jquery:1.11.1"

        // Uncomment these to enable additional asset-pipeline capabilities
        //compile ":sass-asset-pipeline:1.9.0"
        //compile ":less-asset-pipeline:1.10.0"
        //compile ":coffee-asset-pipeline:1.8.0"
        //compile ":handlebars-asset-pipeline:1.3.0.3"
    }
}

Here is the mapping used in the domain class:

  static mapping = { 
        datasource 'teste'
        table 'cd_pt'
        id name: 'codPTes'
        codPTes column: 'cod_p'
    }

Anyone have a clue?


回答1:


Got this working by using the PSQL as primary DB and the H2 as secondary DB. Still don't know why or if the DataSource had errors in the configuration (I've spent 3 weeks on this, but it's surely possible).



来源:https://stackoverflow.com/questions/33549958/multiple-data-sources-configuration

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!