我需要使用会话更改数据源的url或将当前连接更改为新连接或在运行时(在我的控制器或服务中)构建新数据源
如果任何人可以告诉我另一种方式排除多数据源告诉我
谢谢
答案 0 :(得分:3)
我的方法不是最干净的,但应该有效。如果您可以访问dataSource
Spring bean,则可以更改其属性。您需要让它关闭所有池连接,然后新连接将使用新设置。
您可以像任何bean一样使用依赖注入来访问数据源,即def dataSourceUnproxied
。您必须使用“dataSourceUnproxied”而不是“dataSource”来获取真实的DataSource
,而不是Grails包装真实的代理的事务感知代理。
完成后你可以像这样更改网址,用户名等:
dataSourceUnproxied.url = 'some other url'
dataSourceUnproxied.username = 'some other username'
然后关闭它以强制关闭所有连接,但重置closed
标志以在下次调用getConnection()
时将其设置为重新连接:
dataSourceUnproxied.close()
dataSourceUnproxied.closed = false
这非常特定于池实现,因为DataSource
接口只有几个方法。这适用于Grails默认使用的org.apache.commons.dbcp.BasicDataSource
,但如果您使用的是其他池实现,则需要查看其源代码以获得等效方法。