Grails更改会话的数据库URL连接

时间:2012-09-25 07:00:28

标签: grails

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

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

谢谢

1 个答案:

答案 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,但如果您使用的是其他池实现,则需要查看其源代码以获得等效方法。