2015-11-05 104 views
0

我在Grails 2.5.1中配置多個DataSources時遇到了問題。我使用PostgreSQL 9.4.4,H2DB和休眠4.3.10與GGTS。 我收到'Table「XX」找不到; SQL語句......」消息,並與控制檯調試後,我發現會議將返回錯誤的驅動程序:多個數據源配置

import teste.PTes; 

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

Result: H2 JDBC Driver 

這個領域類是應該對使用PostgreSQL驅動會話中運行。 這裏是數據源

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' 
     } 
    } 
} 

這裏是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" 
    } 
} 

這裏是域類使用的映射:

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

任何有線索?

+0

忘了提。當使用單個數據源時,它工作正常。 –

回答

0

通過使用PSQL作爲主數據庫和H2作爲輔助數據庫得到了這個工作。 仍然不知道爲什麼或如果DataSource在配置中有錯誤(我已經花了3個星期的時間,但它肯定是可能的)。