我已经阅读了很多关于在运行时切换多个数据源的内容,但据我所知,他们已经定义了数据源。我不太确定如何在运行时从webservice调用中设置数据源属性。
我不需要在数据源之间切换,只需要创建一个带有来自Web服务的连接数据的数据源。 有没有办法从Web服务中检索这些参数并从中创建数据源?
此处的策略是从Web服务中为所有项目检索数据源参数,这样连接数据不在文件内部也不在代码中,并且仅由DBA从全局安全性应用程序中操作。
我尝试在同一个数据源文件中调用Web服务,但它不起作用。
的信息:
Web服务是一种Soap
Web服务
Grails:1.3.9
问候。
答案 0 :(得分:0)
我认为您可以创建一个BeanPostProcessor,负责调用您的网络服务并更改数据源的设置。
可能您需要delay the session factory creation,确保Grails在您正确设置之前不会尝试使用您的dataSource。
BeanPostProcessor看起来像:
class WebserviceDataSourceBeanPostProcessor implements BeanPostProcessor {
Object postProcessBeforeInitialization(Object bean, String beanName) {
return bean
}
Object postProcessAfterInitialization(Object bean, String beanName) {
if (bean instanceof DataSource){
def info = //call webservice here...
bean.username = info.username
bean.password = info.password
bean.url = info.url
//checkout more setters in: http://commons.apache.org/proper/commons-dbcp/apidocs/org/apache/commons/dbcp/BasicDataSource.html
}
return bean
}
}
并确保您在 resources.groovy
中声明了此Spring Beanbeans = {
webserviceDataSourceBeanPostProcessor(WebserviceDataSourceBeanPostProcessor)
}
如果您有多个项目使用来自网络服务的相同配置,您可能会考虑插件的可能性,重复使用您的代码。