Grails 2.4.2 - 动态引用默认数据源

2024-03-17

这个问题已经部分回答了here https://stackoverflow.com/a/10537001/2315900但动态引用默认数据源仍然存在问题。

我正在开发一个内部应用程序,它允许开发人员修改我们的多租户应用程序之一的配置设置,并将这些设置从开发推送到测试、登台和生产。 其中每一个都有自己的数据源,并且 Grails 应用程序将安装在每个开发人员的计算机上。

本地数据源将是默认数据源,然后 dataSource_testing、dataSource_staging 等将引用适当的环境。

我可以通过以下方式动态引用远程数据源:

def setting = Setting."${params.environmnet}".get(id)

然而,如果params.environment正在引用默认数据源,此代码不再有效。 在设置域类的文档中,它指出:

如果域类使用默认数据源和一个或多个其他数据源,请使用特殊名称“DEFAULT”来指示默认数据源

See 文档 http://grails.org/doc/latest/guide/conf.html#dataSource

这看起来在定义您的域类适用于哪些数据源时有效,但无法引用您的域类,例如:def setting = Setting.DEFAULT.get(id)。 您收到一条错误消息:

没有这样的属性:类的默认值...

我真的really不想重新设计应用程序,以便不真正使用默认数据源,然后创建一个新的dataSource_local数据源。如果我可以避免这种情况,那就太好了,因为这意味着更新仅适用于本地数据源的代码堆栈。

所以我的问题...有没有办法动态引用默认数据源?


目前不支持它,但您可以进行一些修改来添加缺少的元方法 (getDEFAULT)。

如果您认为这是一项重要功能,您可以在 Grails Jira 上提出功能请求问题。通过添加一个单独的方法来查找给定数据源的所谓 GormStaticApi 实例,支持静态访问 (CompileStatic) 可能是有意义的。请向 Grails Jira 添加功能请求,以便它解释您的用例。

现有的实现会跳过默认数据源:

Hibernate4的逻辑:https://github.com/grails/grails-data-mapping/blob/f9da9fe/grails-datastore-gorm-hibernate4/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateUtils。绝妙#L122-L125 https://github.com/grails/grails-data-mapping/blob/f9da9fe/grails-datastore-gorm-hibernate4/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateUtils.groovy#L122-L125和休眠3:https://github.com/grails/grails-data-mapping/blob/f9da9fe/grails-datastore-gorm-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateUtils。绝妙#L121-L124 https://github.com/grails/grails-data-mapping/blob/f9da9fe/grails-datastore-gorm-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateUtils.groovy#L121-L124

解决方法是将以下类保存在 grails-app/conf/WorkaroundsBootStrap 中:

import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler
import org.codehaus.groovy.grails.commons.GrailsApplication
import org.codehaus.groovy.grails.commons.GrailsClass
import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty
import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsHibernateUtil
import org.codehaus.groovy.grails.orm.hibernate.cfg.HibernateUtils

class WorkaroundsBootStrap {
    GrailsApplication grailsApplication
    def dataSource
    def transactionManager
    def hibernateDatastore

    def init = { servletContext ->
        def datasourceName = GrailsDomainClassProperty.DEFAULT_DATA_SOURCE
        for(GrailsClass grailsClass in grailsApplication.getArtefacts(DomainClassArtefactHandler.TYPE)) {
            def dc = grailsClass
            if (GrailsHibernateUtil.isMappedWithHibernate(dc) && GrailsHibernateUtil.usesDatasource(dc, datasourceName)) {
                HibernateUtils.registerNamespaceMethods dc, hibernateDatastore, datasourceName, transactionManager, grailsApplication
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Grails 2.4.2 - 动态引用默认数据源 的相关文章

  • Grails REST 安全性 - 将用户 ID 添加到令牌

    我想将用户 id 字段添加到从 api login 返回的令牌中 目前是 username user roles ROLE USER token type Bearer access token eyJhbGciOiJIUzI1NiJ9 2
  • Grails 2.4.3:使用 REST 服务

    如何在 Grails 2 4 3 中使用 RESTful Web 服务 我还需要使用基本身份验证 你可能认为这个问题已经有了一个很好的答案 但我真的很难找到一个 许多答案都向我指出了 Grails Rest 插件的方向 我已经尝试过但无法为
  • 在 Eclipse (Spring Source) 中,Grails 始终以生产模式构建

    当在 Grails 项目中使用 Eclipse 时 战争的构建似乎陷入了生产模式 如果您想部署到附加的 tcServer 您只需右键单击您的项目 然后选择 运行方式 gt 在服务器上运行 如果您将 grails 项目设置为 dev 右键单击
  • 将结果行强制转换为对象

    有没有办法将调用存储过程获得的结果行强制转换为特定对象 以便我可以仅将该对象的列表传递到视图中 我知道我可以使用 Node list 之类的东西来做到这一点 但我最终将用一个相当复杂的存储过程替换 getnodes 该存储过程创建临时表并执
  • 在 Grails 中,域类中有像 onLoad() 这样的东西吗?

    Guys 我有以下域类 class Product String name String productRecord static transients productRecord ProductRecord 是根据 Product 实例的
  • 使用 html 表收集提交表单中的各种数据

    我有一个 jsp 页面 其中包含一个表 分页并带有顺序列 一个搜索字段和其他基于复选框的过滤器 这样 当我单击按钮时 它会采用表格的分页 表格的顺序 搜索字段中的值以及最终的其他参数 复选框 来执行查询 目前 该表具有分页和使用标签库排序的
  • Grails 2.0 中的 dateCreated、lastUpdated 字段

    我有一个使用 Grails 1 3 7 的应用程序 我刚刚将其迁移到 Grails 2 0 该应用程序利用自动dateCreated and lastUpdated用于管理与对象的创建和修改相关的时间戳的字段 升级后 我收到以下错误 Run
  • grails 中的 log4j:在附加程序配置中使用变量时打印错误

    我在 grails 2 3 4 中使用 slf4j DailyRollingFileAppender 当我尝试使用变量作为 文件 参数的一部分时 grails 总是在应用程序启动时打印一些错误日志 但是我的应用程序的日志消息可以按预期打印到
  • 如何对 Grails 应用程序进行并发修改测试

    我想运行测试来模拟用户同时修改 Grails 应用程序的某些数据 我可以使用任何插件 工具 机制来有效地做到这一点吗 它们不必是特定于 grails 的 应该可以并行触发多个操作 我更愿意在功能级别上运行测试 到目前为止我正在使用 Sele
  • 从控制器传递 gsp 参数

    我如何通过不是域类实例的控制器将参数传递到groovy服务器页面 您将参数放入返回给 GSP 的模型对象映射中 例如 def index def hobbies basketball photography render view inde
  • 数据源和数据集的区别

    我目前正在开发一个项目 其主要任务是读取存储在 SQL 数据库中的数据并以用户友好的形式显示它们 使用的编程语言是C 我在 Borland C Builder 6 环境中工作 但我认为标题中提出的问题与编程语言或库无关 当从数据库读取数据时
  • Grails - 错误分叉 Grails VM 因错误退出

    首先 我想说 我是 Grails 的初学者 在尝试遵循一些示例时 我不断收到无法解决的错误 如果问题很愚蠢 那么很抱歉 我通过命令行创建了一个虚拟应用程序 并尝试以相同的方式运行它 run app 但出现以下错误 运行 Grails 应用程
  • grails postgres 消息:错误:列 this_.id 不存在

    grails 和 postgres 用于用户域 Message ERROR column this id does not exist 明白问题了 对于用户域 我将 postgres 表设置为 用户 因此 默认情况下 当它尝试查询用户表时
  • Chrome 和 JSESSIONID

    chrome 出现以下问题 我已经在服务器上运行 Grails 1 3 7 应用程序 我注意到 当我从 Chrome 请求静态内容 例如非动态 html 文件 时 Chrome 会创建两个 JSESSIONID Cookie 第一个是登录窗
  • 当数据源中只有 1 项时 FormView 不显示 PagerTemplate

    我有一个带有自定义 PagerTemplate 的 FormView 控件和我自己的分页 LinkBut ton 一切都很好 直到我加载的数据集仅包含一个记录 项目并完全隐藏 PagerTemplate 我在网上搜索了一下 找到了几个答案
  • 资源注入不适用于 glassfish 4,而查找可以工作

    我在应用程序范围托管 bean 中使用 glassfish 4 进行资源注入 但 glassfish 无法工作 而是使用默认的 derby 数据库 这是我的代码 Named value dbManager ApplicationScoped
  • withTransaction 和 withNewTransaction 有什么区别?

    以下动作有什么区别 def someAction User withTransaction and def someAction User withNewTransaction 我什么时候用什么 当 grails 操作仅包含 Transac
  • 部署 Grails 应用程序时出错 - 初学者

    我在部署 Grails 应用程序时遇到问题 一切都在本地测试环境中运行 ERROR localhost startStop 1 错误 context GrailsContextLoader 错误 初始化应用程序 使用名称创建 bean 时出
  • grails 中的 log4j:如何登录文件?

    我的 grails config groovy 中有这个 log4j 配置 log4j error org codehaus groovy grails web servlet controllers org codehaus groovy
  • 如何在 Grails Geb/Spock 测试用例中获取 sessionFactory?

    我想我需要在 GebSpec 测试中刷新 hibernate 会话 所以我想获取 sessionFactory 看起来应该被注入 但是当我做这样的事情时 class MySpec extends GebSpec def sessionFac

随机推荐

  • 配置 JTDS 以与 HikariCP + Spring + MS SQL Server 一起使用

    我一直在谷歌上搜索 JTDS 1 3 1 的配置 以便与 HikariCP 2 4 3 Spring 4 1 2 和 MS SQL Server 2008 一起使用 但找不到完整且有效的示例 这是我所拥有的
  • 使用cuda编译dlib

    我正在尝试用cuda编译dlib 我从这个 GitHub 链接克隆存储库https github com davisking dlib https github com davisking dlib然后尝试运行 python setup p
  • 保护字符串缓冲区免受两个线程的影响?

    我正在通过 Indy 套接字处理流数据包字符串 在客户端 我有一个线程从TIdTCPClient并将这些数据连续附加到单个字符串缓冲区的末尾 我有另一个线程从头开始连续读取该缓冲区 根据需要复制 和删除 数据 一次一个完整的数据包 我知道在
  • 使用时间戳计数器获取时间戳

    我使用下面的代码来获取处理器的时钟周期 unsigned long long rdtsc void unsigned hi lo asm volatile rdtsc a lo d hi return unsigned long long
  • 对于委托接口,Kotlin IllegalAccessError 带有 += 和 -=

    我定义了这个类 class NeverNullMap
  • 如何在偏好更改时重新安排警报管理器

    我有一个 Android 服务 当手机启动时 广播接收器会收到通知 并安排服务以 X 分钟的间隔重复运行 从此以后 每隔 X 分钟 另一个广播接收器就会收到这些通知并启动该服务 该服务完成其工作并退出 到目前为止 一切都很好 现在我希望这
  • $scope.myVariable 未在 Angular-ui 引导模式的控制器中更新

    在我看来 我有一个输入 一个跨度和一个按钮 如下所示 当在文本框中输入内容时 span按预期阅读更新 但当点击按钮时 phoneNumber控制器内部尚未更新 app controller myPopopCtrl scope modalIn
  • 如何将当前行作为 Vim EX 命令执行?

    假设我正在编辑我的 vimrc文件 我刚刚添加了几行 例如一个新的键映射 我不想重新加载whole file so 因为这会重置我正在尝试的许多临时内容 我只想运行我当前正在处理的两条线 我没有运气尝试将这些行复制 粘贴到命令缓冲区中 因为
  • CPU 和数据对齐

    如果您觉得这个问题已经被回答了很多次 请原谅我 但我需要以下问题的答案 为什么数据必须对齐 在 2 字节 4 字节 8 字节边界上 这里我的疑问是 当CPU有地址线Ax Ax 1 Ax 2 A2 A1 A0时 很有可能按顺序寻址内存位置 那
  • 循环枚举、TypeScript 和 JQuery

    你好 我正在尝试使用 TypeScript 和 JQuery 开发一个简单的待办事项应用程序 我有一个列出任务类型的枚举 export enum TaskType FrontEnd BackEnd Designer 然而 使用 jquery
  • 字符串池:“Te”+“st”比“Test”快?

    我正在尝试一些有关字符串池的性能基准 然而 结果并不令人期待 我做了3个静态方法 Perform0 方法 每次都会创建一个新对象 Perform1 方法 字符串文字 Test Perform2 方法 字符串常量表达式 Te st 我的期望是
  • 如何使用 PyYAML 创建当前本地日期和时间

    我希望能够创建一个日期时间对象datetime datetime now PyYAML 调用一些函数很容易 gt gt gt y YAML description Something ts python object apply time
  • iOS 如何从 UISlider 中删除发光/阴影

    如何去除此 UISlider 中的发光 阴影 事实证明 我所需要做的就是设置一个自定义拇指图像 并且阴影不存在
  • 重载 istream 运算符>> C++

    假设我有一个字符向量 我将它作为字符串而不是字符向量推入流中 我如何使用运算符 gt gt 取回字符向量 class C private vector
  • 在 Rails 中提供静态 JSON 对象文件

    如何从 Rails 中的文件提供静态 JSON 对象 我想在ajax调用中访问它 最好的方法是什么 只需将要渲染的内容放入变量中 然后使用render json gt variable列表 字典等都有合理的默认值 看看这个 http gui
  • Spring 相当于 Guice 中的 FactoryModuleBuilder、@AssistedInject 和 @Assisted 的什么?

    是什么Spring框架 http projects spring io spring framework 相当于FactoryModuleBuilder http google github io guice api docs latest
  • Sql Server 死锁对象 ID 太大

    我试图追踪 SQL 2005 数据库 64 位 中发生的死锁 我们目前没有启用快照隔离 我打开 tf 1204 并收到以下输出 从这个输出中 我可以确定节点 1 是一个存储过程 它选择数据并且仅修改 temp 表中的值 节点 2 是另一个存
  • 在运行时更改标记图标

    有没有办法在运行时更改 Google Maps Android API v2 标记的图标 而无需删除 重新添加我想要更改其图标的标记 我可以对其应用变换 如旋转 吗 Thanks 更新后 我可以在运行时轻松更改标记图标Google Play
  • 如何使 TensorFlow 在具有 2.x 功能的 GPU 上运行?

    我已在 Linux Ubuntu 16 04 上成功安装了tensorflow GPU 并进行了一些小的更改 以使其能够与新的 Ubuntu LTS 版本配合使用 然而 我认为 谁知道为什么 我的 GPU 满足计算能力大于 3 5 的最低要
  • Grails 2.4.2 - 动态引用默认数据源

    这个问题已经部分回答了here https stackoverflow com a 10537001 2315900但动态引用默认数据源仍然存在问题 我正在开发一个内部应用程序 它允许开发人员修改我们的多租户应用程序之一的配置设置 并将这些