Grails 从 session 更改数据库 URL 连接

标签 grails

我需要使用 session 更改数据源的 url 或将当前连接更改为新连接或在运行时构建新数据源(在我的 Controller 或服务中)

如果有人可以告诉我另一种方式排除多数据源告诉我

谢谢

最佳答案

我有一种不是最干净的方法,但应该可以。如果您可以访问 dataSource Spring bean 你可以改变它的属性。您需要让它关闭所有池连接,然后新连接将使用新设置。

您可以像任何 bean 一样使用依赖注入(inject)来访问数据源,即 def dataSourceUnproxied .您必须使用“dataSourceUnproxied”而不是“dataSource”才能获得真正的 DataSource ,而不是 Grails 包装真实代理的事务感知代理。

完成后,您可以像这样更改 url、用户名等:

dataSourceUnproxied.url = 'some other url'
dataSourceUnproxied.username = 'some other username'

然后关闭它以强制关闭所有连接,但重置 closed标记以欺骗它下次重新连接getConnection()叫做:
dataSourceUnproxied.close()
dataSourceUnproxied.closed = false

这是非常特定于池实现的,因为 DataSource接口(interface)只有几个方法。这适用于 org.apache.commons.dbcp.BasicDataSource Grails 默认使用的,但如果您使用不同的池实现,则需要查看其源以获得等效方法。

关于Grails 从 session 更改数据库 URL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12577736/

相关文章:

java - Grails CXF插件

grails - grails 如何将参数传递给 Controller ​​方法?

grails - Grails:如何将依赖项升级从2.x.x迁移到3.0.8?

grails - springsecurity与grails-如何拒绝使用逻辑删除属性删除的用户的登录

ajax - Spring 安全性中拒绝ajax请求,Grails

grails - 由消息队列触发时,Grails服务未保存域对象

grails - Bcrypt密码编码器-Grails

grails - grails3中作为单例的服务范围

grails - 在客户端或服务器端拦截 Grails GSP 操作

grails - Grails 2.3.5集成测试