Grails:从Web服务创建我的数据源

时间:2013-05-30 16:27:23

标签: web-services grails datasource

我已经阅读了很多关于在运行时切换多个数据源的内容,但据我所知,他们已经定义了数据源。我不太确定如何在运行时从webservice调用中设置数据源属性。

我不需要在数据源之间切换,只需要创建一个带有来自Web服务的连接数据的数据源。 有没有办法从Web服务中检索这些参数并从中创建数据源?

此处的策略是从Web服务中为所有项目检索数据源参数,这样连接数据不在文件内部也不在代码中,并且仅由DBA从全局安全性应用程序中操作。

我尝试在同一个数据源文件中调用Web服务,但它不起作用。

的信息:
Web服务是一种Soap
Web服务 Grails:1.3.9

问候。

1 个答案:

答案 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 Bean
beans = {
    webserviceDataSourceBeanPostProcessor(WebserviceDataSourceBeanPostProcessor)
}

如果您有多个项目使用来自网络服务的相同配置,您可能会考虑插件的可能性,重复使用您的代码。