【问题标题】:Grails quartz plugin is not working when deployed in Tomcat在 Tomcat 中部署时,Grails 石英插件不起作用
【发布时间】:2013-07-24 11:23:57
【问题描述】:

我有一个使用 Grails 开发的 Web 应用程序。我正在尝试实现一个后台进程,该进程使用 Grails 的quartz1.0-RC9 插件每5分钟扫描一次数据库中的表。

在尝试编写实际逻辑之前,我正在学习如何使用该插件,因为我是石英的新手。所以我创建了一个作业,每 5 秒打印一次带有当前时间戳的消息“hai”。

class checkJob {
    static triggers = {
      simple name:'sampleQuartz', startDelay:10000, repeatInterval: 5000l, repeatCount: -1 // execute job once in 5 seconds
    }

    def execute() {
        println "hai!!!"+new Date()// execute job
    }
}

而我的 QuartzConfig.groovy 是

quartz {
    autoStartup = true
    jdbcStore = false
    waitForJobsToCompleteOnShutdown = true
    exposeSchedulerInRepository = false

    props {
        scheduler.skipUpdateCheck = true
    }
}

environments {
    test {
        quartz {
            autoStartup = true
        }
    }
    production {
        quartz {
            autoStartup = true
        }
    }
}

当使用命令grails run-app 运行时,这可以正常工作。但是,当使用命令grails prod war 创建战争并且部署在 Tomcat 中时,没有任何效果。甚至 index.html 页面也没有加载,而是给出了 Http-404 错误。

我在 BuilConfig.groovy 中引用了这个插件,如插件类别下的文档中所述。

compile ":quartz:1.0-RC9"

但没有任何效果。

然后我创建了一个新的 Grails 项目,它只有上面提到的石英代码,并使用 grails prod war 创建了一个战争。这适用于 Tomcat。

我正在使用

Tomcat 6
Grails 2.0.1
quartz 1.0-RC9

在现有的 grails 应用程序中创建作业时缺少什么?

请有人帮助我。

我在这个问题上做了一些基础工作。在 grails dev-war 创建我的 grails 应用程序“Timeprocess”的战争并在 Tomcat6 下部署时,我在 localhost.txt 文件中得到以下内容

Jul 29, 2013 3:35:27 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Jul 29, 2013 3:35:32 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pluginManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.codehaus.groovy.grails.web.context.GrailsContextLoader.initWebApplicationContext(GrailsContextLoader.java:66)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.RuntimeException: Unable to locate constructor with Class parameter for class grails.plugins.quartz.DefaultGrailsJobClass
    at org.codehaus.groovy.grails.commons.ArtefactHandlerAdapter.newArtefactClass(ArtefactHandlerAdapter.java:113)
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:894)
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:615)
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.configureLoadedClasses(DefaultGrailsApplication.java:326)
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.initialise(DefaultGrailsApplication.java:825)
    at org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean.afterPropertiesSet(GrailsPluginManagerFactoryBean.java:110)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 37 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.codehaus.groovy.grails.commons.ArtefactHandlerAdapter.newArtefactClass(ArtefactHandlerAdapter.java:104)
    ... 44 more
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
    at grails.plugins.quartz.config.TriggersConfigBuilder.createTrigger(TriggersConfigBuilder.groovy:74)
    at grails.plugins.quartz.config.TriggersConfigBuilder.createNode(TriggersConfigBuilder.groovy:215)
    at grails.plugins.quartz.config.TriggersConfigBuilder.createNode(TriggersConfigBuilder.groovy:208)
    at Timeprocess.ScheduleScanJob$__clinit__closure1.doCall(ScheduleScanJob.groovy:7)
    at grails.plugins.quartz.config.TriggersConfigBuilder.build(TriggersConfigBuilder.groovy:52)
    at grails.plugins.quartz.DefaultGrailsJobClass.evaluateTriggers(DefaultGrailsJobClass.java:58)
    at grails.plugins.quartz.DefaultGrailsJobClass.<init>(DefaultGrailsJobClass.java:48)
Jul 29, 2013 3:35:34 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextInitialized()
Jul 29, 2013 3:35:34 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextInitialized()
Jul 29, 2013 3:36:31 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: contextDestroyed()
Jul 29, 2013 3:36:31 PM org.apache.catalina.core.ApplicationContext log
INFO: ContextListener: contextDestroyed()

谁能帮我指出这里出了什么问题?

【问题讨论】:

  • 相同的石英代码在新应用程序中有效,但在旧应用程序中无效,因此问题可能出在您的应用程序而不是石英代码上尝试使用旧应用程序“grails prod run-war”,看看问题是否重现.
  • 我试过你提到的@sudhir。但是目标下的tomcat-out.txt中没有任何内容。只有“服务器正在运行。浏览到 8080:8080localhost”
  • 请...有人帮我解决这个问题...!
  • @VasanthRajasekaran:我在您的日志中看到错误“Caused by: java.lang.IncompatibleClassChangeError: Implementing class”。也许你的 Tomcat 中加载了同一个库的两个版本。
  • IncompatibleClassChangeError 经常是由于加载库冲突引起的(不小心拉取了同一个库的两个版本作为依赖,或者使用了不兼容的库版本)。我建议你尝试一次 grails clean,如果它没有得到解决,请尝试删除存储库中当前的 Quartz 库

标签: grails tomcat6 quartz-scheduler war


【解决方案1】:

我建议做一个:

grails clean

同时删除 .slcache 文件夹,您可以在

下找到该文件夹
~/.grails/.slcache

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 2017-08-30
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多