`
geszJava
  • 浏览: 33300 次
社区版块
存档分类
最新评论

grails的job

阅读更多
打算再我的项目中引入静态页面的生成,因为这几天看代码看的太紧张了,于是想去实现他。首先想到的是Grails如何来进行controller的执行,因为我的这个job需要Domain Class的支持,进一步说就是我需要能让程序可以享受Domain Class的Domain Class Methods的便利,不仅如此,还可以保证Domain Class代码的单纯性,想想也是,既然Grails提供了Spring+Hibernate的解决方案,为什么不用他呢。吼吼。
    于是开始看源代码,不得不说的是,Eclipse的引用功能的确是非常的贴心,至少读源代码方面是一流的,于是从DomainClassMethods->GrailsDomainConfigurationUtil->ConfigurableLocalSessionFactoryBean->SpringConfig->GrailsDispatcherServlet,OK!路子走通了,那么来看看GrailsDispatcherServlet里面做些什么呢?于是仔细look...发现了一个很重要的类GrailsApplication,可以说这个类是Grails的基础,毫无疑问,他可以脱离web server环境,因为grails有个Console类,就是直接引用GrailsApplication的,相当于Grails可以在其他应用程序中跑起来!
    当然这个发现并没给我带来多大帮助。。。我还是需要从GroovyPageServlet开始分析,到底Grails是如何建立web环境,并且执行controller的原理。于是进入GroovyPageServlet,马上就可以跟踪到SimpleGrailsControllerHelper这里,这里是Grails处理controller的地方,于是发现了两个很重要的method: handleURI(),handleAction(),自此基本上可以解决静态页面生成的问题了。
   但是,这时猛然想起,grails自己本身就支持job,而且是大名鼎鼎的Quartz!亏大了。。于是马上打开User Guide,找到Job Scheduling (Quartz)这个章节,看了看,非常简单,grails create-job就可以搞定,无外乎在项目下面建立一个jobs目录,然后写个类,上面提供了一个非常简单的example:
class MyJob {
  def startDelay = 100
  def timeout = 1000

  def name = "MyJob"
  def group = "MyGroup"

  def execute(){
    print "Job run!"
  }
}
可惜的是,这个example是错误的!这个也是我出师不利以后调试源代码才发现的,grails 0.2中,"startDelay"和"timeout"这两个field是用String.class来解析的,如果写成number的时候,你的schedule是十分钟执行一次,很郁闷,因为他缺省的就是6000000,呵呵。正确的写法是:
class MyJob {
  def startDelay = "100"
  def timeout = "1000"

  def name = "MyJob"
  def group = "MyGroup"

  def execute(){
    print "Job run!"
  }
}
就这么简单,不过在佩服grails项目组的同时,也稍微鄙视一下粗心的Micha?? K??ujszo,(抱歉,我这里是乱码),这个错误实在不该犯!

另外,在job里面可以使用Domain Class的Domain Class Methods,这可是个好东东,很贴心的设计。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics