多个数据源配置 [英] Multiple data sources configuration

查看:129
本文介绍了多个数据源配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Grails 2.5.1中配置多个DataSources时遇到问题。我使用PostgreSQL 9.4.4,H2DB和休眠4.3.10与GGTS。
我没有找到'TableXX; SQL语句...'的消息,并且在与控制台调试后,我发现会话正在返回错误的驱动程序:

 导入teste.PTes; 

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

结果:H2 JDBC驱动

该域类应该在使用PostgreSQL驱动程序的Session上运行。
这里是数据源

  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
}

//环境特定设置
环境{
开发{
dataSource {
dbCreate =create-drop//创建'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'

用户名:'teste'
密码:'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

}
生产{
dataSource {
dbCreate =update
url =jdbc:h2:prodDb; MVCC = TRUE; LOCK_TIMEOUT = 10000; DB_CLOSE_ON_EXIT = FALSE
properties {
//参见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 {
方言:org.hibernate.dialect.PostgreSQL82Dialect
driverClassName:'org.postgresql.Driver'
用户名:'teste'
密码:'teste'
url:'jdbc:postgresql:// localhost:5432 / teste; DB_CLOSE_ON_EXIT = FALSE'
dbCreate:'update'
}
}
}

以下是BuildConfig:

  grails.servlet.version =3.0//根据目标容器合规性(2.5或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 /工作
grails.project.target.level = 1.6
grails.project.source.level = 1.6
//grails.project.war.file =target / $ {appName} - $ {appVersion} .war

grails.project.fork = [
//为编译JVM配置设置,请注意,如果您更改了Groovy版本,则需要分叉编译
//编译:[maxMemory:256,minMemory:64,debug:false,maxPerm:256,daemon:true],

//配置测试应用程序JVM的设置,默认使用守护进程
test:[maxMemory:768,minMemory:64,debug:false,maxPerm:256,daemon:true],
//配置集为运行应用程序JVM
运行:[maxMemory:768,minMemory:64,debug:false,maxPerm:256,forkReserve:false],
//配置运行JVM的设置
war:[maxMemory:768,minMemory:64,debug:false,maxPerm:256,forkReserve:false],
//配置Console UI的设置JVM
console:[maxMemory:768 ,minMemory:64,debug:false,maxPerm:256]
]

grails.project.dependency.resolver =maven//或ivy
grails.project.dependency .resolution = {
//继承Grails的默认依赖关系
inherits(global){
//在此指定依赖项排除;例如,取消注释以禁用ehcache:
//排除'ehcache'
}
日志错误// Ivy解析器的日志级别,'error','warn',' info','debug'或'verbose'
checksums true //是否验证解析
上的校验和legacyResolve false //是否在插件安装时执行二级解析,不建议并且为了向后兼容

repositories {
inherits true //是否从插件继承存储库定义
$ b grailsPlugins()
grailsHome()
mavenLocal()
grailsCentral()
mavenCentral()
//取消注释这些(或添加新的)以启用公共Maven仓库中的远程依赖项解析
// mavenRepohttp:// repository。 codehaus.org
mavenRepohttp://download.java.net/maven/2/

//春季安全回购
mavenRepohttp:// repo.spring.io/milestone/
// mavenRepohttp://repository.jboss.com/maven2/
}

依赖关系{
/ /在构建,编译,运行时,测试或提供的范围下指定依赖项
// runtime'mysql:mysql-connector-java:5.1.29'
runtime'org.postgresql:postgresql:9.4-1201-jdbc4'
testorg.grails:grails- datastore-test-support:1.0.2-grails-2.4


插件{
//仅用于构建系统的插件
build:tomcat: 7.0.55.3//或:tomcat:8.0.22

//编译步骤的插件
compile:scaffolding:2.1.2
compile: cache:1.1.8'
// asset-pipeline 2.0+需要Java 7,使用版本1.9.x和Java 6
compile:asset-pipeline:2.2.3
compile :quartz:1.0.2
compile:joda-time:1.5
compile:XXXXXXX-plugin:0.1-SNAPSHOT
$ b $ //在运行时需要插件不适用于编译
runtime:hibernate4:4.3.10//或:hibernate:3.6.10.18
runtime:database-migration:1.4.0
runtime:jquery :1.11.1

// Un评论这些以启用额外的资产管道功能
//编译:sass-asset-pipeline:1.9.0
//编译:less-asset-pipeline:1.10.0
// compile:coffee-asset-pipeline:1.8.0
// compile:handlebars-asset-pipeline:1.3.0.3
}
}

以下是在域类中使用的映射:

 静态映射= {
datasource'teste'
表'cd_pt'
id名称:'codPTes'
codPTes列:'cod_p'





$ b

任何人都有线索?

解决方案

通过使用PSQL作为主数据库并将H2作为辅助数据库来完成此项工作。
仍然不知道为什么或者DataSource在配置中有错误(我已经花了3周时间,但它肯定是可能的)。


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?

解决方案

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).

这篇关于多个数据源配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆