从石英作业访问grails应用程序配置

时间:2014-07-28 09:55:19

标签: grails dependency-injection task quartz-scheduler jobs

使用grails 2.4.2,quartz:1.0.2,我尝试访问配置属性

class MyJob {
  def grailsApplication
  int propA
  def MyJob() {
    propA = grailsApplication.config.foo.bar.propAVal
  }
  ...
}
然而,

grailsApplication并没有被注入,并且为空。

Can't access any bean from Quartz Job in Grails据说与此有关,但我并不确定这个明确的答案如何解决OP的问题: - /

帮助? 10X

3 个答案:

答案 0 :(得分:1)

问题可能是你在构造函数中访问grailsApplication,它还没有被注入。

我建议转储无用的类属性int propA并以这种方式执行:

  def grailsApplication

  def execute() {
    def propA = grailsApplication.config.foo.bar.propAVal         
    ... 
    //use propA for something
  }

答案 1 :(得分:1)

import grails.util.Holders

class MyJob {
    def grailsApplication = Holders.getGrailsApplication()
    int propA
    def MyJob() {
        propA = grailsApplication.config.foo.bar.propAVal
    }
    ...
}

通过这种方式,您可以从Quartz作业或“/ src”文件夹中的任何groovy文件中访问“grailsApplication”。

答案 2 :(得分:0)

对于使用grails 3.x的用户,现在必须明确指定 grailsApplication 的类型。例如。而不是:

def grailsApplication

你需要使用:

import grails.core.GrailsApplication
...
GrailsApplication grailsApplication


如果您没有收到以下编译错误:

  

namespace.classnameJob 中的java.lang.Object getGrailsApplication()的返回类型与grails.core.GrailsApplication不兼容   grails.plugins.quartz.QuartzJob