【发布时间】:2014-10-08 13:28:49
【问题描述】:
我创建了一个服务NotifierService
class NotifierService {
MailService mailService
def sendEmail(String email) {
mailService.sendMail {
to email
from "myemail@domain.com"
subject "Subject"
body "Some text"
}
}
}
然后,我尝试在 DbService 服务中的另一个方法 updateUser 中调用 sendEmail 方法
class DbService {
NotifierService notifierService
def updateUser(){
//Some Logic
//Get userObject
def email = userObject.email
//Send email
try {
notifierService.sendEmail(email)
} catch (Exception e) {
e.printStackTrace()
}
}
//Other methods
.
.
.
}
当我在BootStrap 中调用sendEmail 方法时它工作正常,但是当我在DbService 中使用它时出现以下错误
| Error java.lang.NullPointerException: Cannot invoke method sendMail() on null object
| Error at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
| Error at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
| Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
| Error at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:32)
| Error at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
我了解到NotifierService 中的mailService 在DbService 中使用时未初始化。我该如何解决?
DbService 在 grails-job 中实例化
class MyJob {
DbService dbService = new DbService()
static triggers = {
// start delay: 30000 (30sec), repeat: 120000 (2*60*1000 = 2min)
simple name:'myJobTrigger', startDelay:30000, repeatInterval: 120000, repeatCount: -1
}
def execute() {
println "*******************************************************"
println "MyJob: "+new Date()
println "*******************************************************"
dbService.updateUser()
}
}
【问题讨论】:
-
DbService是如何实例化的? -
我正在使用石英插件在 grails 作业中调用
DbService方法。 -
是
NotifierService和DbServicegrails 服务吗? -
是的。我将用
DbService的实例化方式更新问题。
标签: grails grails-2.0 grails-plugin grails-services