Grails 2.0使用POGO中外部文件中的配置值



这是一个场景。我在Grails应用程序之外有一个文件,其中包含url/username/password/等。信息,使开发人员无法看到用于生产的连接信息。我通过以下操作将这些信息包括在Config.groovy中:

grails.config.locations << "file:" + "C:/directory/from/env/variable/data.properties"

然后我在POGO中通过访问这些信息

import org.codehaus.groovy.grails.commons.ConfigurationHolder
...
ConfigurationHolder.config.url
ConfigurationHolder.config.userName
ConfigurationHolder.config.password

在升级到Grails 2.0之后,我注意到ConfigurationHolder已被弃用。所以我查阅了文档:(http://grails.org/doc/latest/guide/conf.html)试图找出如何修复它。文档中说使用grailsApplication来获取配置值。我的问题是,我在POGO中,grailsApplication的Grails自动布线没有被调用。我的问题有两部分:

1) 有没有更好的方法可以在POGO内部从文件中获取配置信息?

2) 如果没有更好的方法,我该如何将grailsApplication注入POGO?

附加信息:我正在使用Grails GLDAPO插件(http://gldapo.codehaus.org/)以与LDAP目录对接。我试图使这些对象(我已经将其放置在/src/groovy下)以与域对象相同的方式工作,因为我可以在它们上使用静态方法来执行findBy...(..)。按照你建议的模式,我必须通过一个服务来获取数据。这还不错,只是不像Groovy:)

基于更新问题的新答案。

你有几个选择。一种是在grailsApplication中连接到这些类的元类,即在BootStrap.groovy:中

class BootStrap {
   def grailsApplication
   def init = { servletContext ->
      YourClass.metaClass.getGrailsApplication = { -> grailsApplication }
   }
}

这将添加一个可以作为grailsApplication属性访问的getGrailsApplication方法。

另一个选项是向这些类添加一个静态grailsApplication字段,并在BootStrap:中进行设置

class BootStrap {
   def grailsApplication
   def init = { servletContext ->
      YourClass.grailsApplication = grailsApplication
   }
}

另请参阅这篇讨论创建holder类的博客文章和这篇讨论重写构造函数的博客文章。

您必须从一个可以依赖注入grailsApplicationbean的工件中调用它,至少是间接的。将def grailsApplication添加到服务或Quartz作业或调用POGO的任何作业中,并将grailsApplication.config传递给需要它的方法调用,或者在setter中传递一次。

相关内容

  • 没有找到相关文章

最新更新