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

Jar*_*son 1 grails grails-config

这是场景.我的Grails应用程序之外的文件包含url/username/password/etc. 信息使开发人员无法查看生产的连接信息.我通过以下方式将此信息包含在Config.groovy中:

grails.config.locations << "file:" + "C:/directory/from/env/variable/data.properties"
Run Code Online (Sandbox Code Playgroud)

然后我通过以下方式在POGO中访问此信息:

import org.codehaus.groovy.grails.commons.ConfigurationHolder
...
ConfigurationHolder.config.url
ConfigurationHolder.config.userName
ConfigurationHolder.config.password
Run Code Online (Sandbox Code Playgroud)

升级到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 :)

Bur*_*ith 5

基于更新问题的新答案.

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

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      YourClass.metaClass.getGrailsApplication = { -> grailsApplication }
   }
}
Run Code Online (Sandbox Code Playgroud)

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

另一种选择是为grailsApplication这些类添加一个静态字段并将其设置为BootStrap:

class BootStrap {

   def grailsApplication

   def init = { servletContext ->
      YourClass.grailsApplication = grailsApplication
   }
}
Run Code Online (Sandbox Code Playgroud)

也看到这个博客帖子是讨论创建持有者类和这一个,讨论重载构造函数.