gpt4 book ai didi

grails - 使多个数据库陷入困境-使用服务选择数据源不起作用

转载 作者:行者123 更新时间:2023-12-02 14:08:58 25 4
gpt4 key购买 nike

我试图在另一个问题中提出这个问题,但是我可能提出了太多细节。

我正在使用Grails和多个数据源。
如果您想使用服务来声明数据源,那对我根本不起作用。

static datasource = "db1"

无论如何,这在Grails Services中对我不起作用

感谢您的帮助/建议。

==
我正在编辑它以包括我的Datasource.groovy

现在,如果我在第二个数据库的域对象上使用静态映射,则可以正常工作。但是,我希望服务决定必须将哪个数据库写入其中,因此我希望服务datasource属性的作用与文档中的相同。
  • 如果我声明我的域对象使用“ALL”数据源,则尽管我设置了

    静态数据源=“db21”
  • 如果我声明我的域对象使用“db1”数据源,则该服务将写入db1数据源
  • 如果我声明了2,3 ... N个数据源,则该服务将仅写入默认数据源或在域groovy文件中声明的数据源。该文档说,我应该能够使用服务来选择数据源。

  • ==============编辑==============
    dataSource {
    pooled = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
    }

    hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
    }
    // environment specific settings
    environments {
    development {
    dataSource {
    dbCreate = "validate"
    url = "jdbc:h2:devDb;MVCC=TRUE"
    }
    dataSource_db1 {
    dbCreate = "validate"
    url = "jdbc:h2:dev1Db;MVCC=TRUE"
    pooled = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
    }
    }
    test {
    dataSource {
    dbCreate = "update"
    url = "jdbc:h2:mem:testDb;MVCC=TRUE"
    }
    }
    production {
    dataSource {
    dbCreate = "update"
    url = "jdbc:h2:prodDb;MVCC=TRUE"
    pooled = true
    properties {
    maxActive = -1
    minEvictableIdleTimeMillis=1800000
    timeBetweenEvictionRunsMillis=1800000
    numTestsPerEvictionRun=3
    testOnBorrow=true
    testWhileIdle=true
    testOnReturn=true
    validationQuery="SELECT 1"
    }
    }

    }
    }

    最佳答案

    我们在Grails应用程序中使用了多个数据源,并已成功使用您上面指定的方法在Service中切换了数据源...

    static datasource = "db1"

    但是,不同之处在于,在我们所有的域对象中,我们都定义了该域对象所属的数据源。我不确定如果不在映射中定义非默认数据源是否可以做。
    static mapping = { datasource 'db1' }

    在某些情况下,我们将拥有两个具有相同名称但指向不同数据源的不同域类。为了保持这种状态,我们将2个域类放在不同的程序包中,并将使用这些域类/数据源的服务放在同一程序包中。

    例如...
    //Domain Classes
    package com.yourcompany
    class Student {
    static mapping = {
    //if you don't indicate the datasource it will use the default
    }
    }

    package com.yourcompany.db1
    class Student {
    static mapping = {
    datasource 'db1'
    }
    }

    //Services
    package com.yourcompany
    class DefaultDbService {
    def getStudents() {
    //This will query the default datasource
    Student.findAll()
    }
    }

    package com.yourcompany.db1
    class Db1Service {
    static datasource = "db1"

    def getStudents() {
    //This will query the 'db1' datasource
    Student.findAll()
    }
    }

    您可以尝试这种方法,看看是否能获得所需的结果。

    关于grails - 使多个数据库陷入困境-使用服务选择数据源不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904315/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com