【问题标题】:Grails: Create my datasource from a webserviceGrails:从 Web 服务创建我的数据源
【发布时间】:2013-05-26 08:01:58
【问题描述】:

我已经阅读了很多关于在运行时在多个数据源之间切换的内容,但据我所知,它们已经定义了数据源。我不太确定如何在运行时通过 web 服务调用分配数据源属性。

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

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

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

信息:
Web 服务是一种肥皂
Web 服务 圣杯:1.3.9

问候。

【问题讨论】:

    标签: web-services grails datasource


    【解决方案1】:

    我认为您可以创建一个 BeanPostProcessor 来负责调用您的网络服务并更改数据源的设置。

    您可能需要delay the session factory creation,确保在您正确设置之前,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
        }
    }
    

    并确保您在 resources.groovy

    中声明了这个 Spring Bean
    beans = {
        webserviceDataSourceBeanPostProcessor(WebserviceDataSourceBeanPostProcessor)
    }
    

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

    【讨论】:

    • 他希望该应用程序成为 Web 服务的 producer,以便 DBA 可以 consume 它并向他发送包含所需数据源信息的有效负载,并最终将其设置在配置中。
    • 哦。我认为你是对的。我误解了这个问题。应用程序必须调用一个通用的 web 服务来获取凭证和数据库信息。是的,BeanPostProcessor 是要走的路。
    • @dmahapatro OP 说:“我不太确定如何在运行时通过 web 服务调用分配数据源属性”。我假设从 web 服务返回的连接属性可以随时更改,他想选择它并配置他的数据源,而不是在 config.groovy 中设置它,因为他说“运行时”。
    • 没错。这个问题有两个方面,我想我对此感到困惑。当 OP 说“来自网络服务调用的数据”时,我将其理解为作为 DBA 请求有效负载的一部分发送到应用程序的数据。然后我意识到 DBA 将不知道公司中正在运行哪些应用程序,并且更新应用程序的数据源不是 DBA 的责任。然后我睁开眼睛,从床上醒来,结束了我的梦。 :-D
    • 谢谢大家,误会了,其实我只需要一个数据源,它必须用我不知道的数据创建,因为它来自一个名为 SecuritySystem 的神奇地方,通过 web 服务我无法控制(我只是称之为),它由 DBA 精灵管理。一旦我首先摆脱了其他一些任务,我就会测试你的解决方案,我会告诉你。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多