我需要使用会话更改数据源的 url 或将当前连接更改为新连接或在运行时构建新数据源(在我的控制器或服务中)
如果有人可以告诉我另一种方式排除多数据源告诉我
谢谢
我有一种不是最干净的方法,但应该可以。如果您可以访问dataSource
Spring bean,则可以更改其属性。您需要让它关闭所有池连接,然后新连接将使用新设置。
您可以像任何 bean 一样使用依赖注入来访问数据源,即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
接口只有几个方法。这适用于org.apache.commons.dbcp.BasicDataSource
Grails 默认使用的方法,但如果您使用不同的池实现,则需要查看其源代码以获取等效方法。