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

Web services Grails:从Web服务创建我的数据源,web-services,grails,datasource,Web Services,Grails,Datasource,我读过很多关于在运行时在多个数据源之间切换的书,但据我所知,它们已经定义好了数据源。我不太清楚如何从webservice调用在运行时分配datasources属性 我不需要在数据源之间切换,只需要使用来自Web服务的连接数据创建一个数据源。 有没有办法从Web服务中检索这些参数并从中创建数据源 这里的策略是从所有项目的Web服务中检索数据源参数,这样连接数据既不在文件中,也不在代码中,只由DBA从全局安全应用程序进行操作 我试图在同一个数据源文件中调用web服务,但没有成功 信息: Web服务是

我读过很多关于在运行时在多个数据源之间切换的书,但据我所知,它们已经定义好了数据源。我不太清楚如何从webservice调用在运行时分配datasources属性

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

这里的策略是从所有项目的Web服务中检索数据源参数,这样连接数据既不在文件中,也不在代码中,只由DBA从全局安全应用程序进行操作

我试图在同一个数据源文件中调用web服务,但没有成功

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


尊敬。

我认为您可以创建一个用于调用Web服务和更改数据源设置的数据库

您可能需要这样做,确保Grails在正确设置之前不会尝试使用您的数据源

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
    }
}
确保您在参考资料中声明了这个Springbean

beans = {
    webserviceDataSourceBeanPostProcessor(WebserviceDataSourceBeanPostProcessor)
}

如果您将有多个项目从一个Web服务使用相同的配置提交,您可能会考虑为此提供一个插件,重复使用您的代码。

他希望该应用程序成为Web服务的
生产者
,以便DBA可以
使用它,并向他发送有效负载以及有关数据源的所需信息,并最终在config.ohhh中进行设置。我想你是对的。我误解了这个问题。应用程序必须调用公共Web服务来获取凭据和数据库信息。是的,BeanPostProcessor是一个不错的选择。@dmahapatro OP说:“我不太确定如何在运行时从webservice调用中调用datasources属性。”。我假设从webservice返回的连接属性可以随时更改,他希望获取并配置他的数据源,而不是在config.groovy中设置,因为他说的是“runtime”。没错。这个问题有两个方面,我想我对此感到困惑。当OP说“来自webservice调用的数据”时,我将其理解为作为DBA请求负载的一部分发送到应用程序的数据。然后,我意识到DBA将不知道公司正在运行什么应用程序,更新应用程序的数据源并不是DBA的责任。然后我睁开眼睛,从床上醒来,结束了我的梦-谢谢大家,很抱歉误解了,事实上我只需要一个数据源,它必须使用我不知道的数据创建,因为它来自一个神奇的地方,叫做SecuritySystem,通过一个我不控制的Web服务(我只是称之为Web服务),它由DBA elves管理。我正在测试你的解决方案,只要我先摆脱一些其他任务,我会让你知道。再次感谢。