1

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

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

谢谢

4

1 回答 1

3

我有一种不是最干净的方法,但应该可以。如果您可以访问dataSourceSpring 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.BasicDataSourceGrails 默认使用的方法,但如果您使用不同的池实现,则需要查看其源代码以获取等效方法。

于 2012-09-26T14:32:32.513 回答