标签: quartz-scheduler

quartz scheduler:在每个月的最后一天运行

我需要在每个月的最后一天开始工作.我尝试了以下cron表达式:

<property name="cronExpression" value="0 0 3 L * * *" />
Run Code Online (Sandbox Code Playgroud)

但得到了这个错误:

Caused by: java.lang.UnsupportedOperationException: Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.
Run Code Online (Sandbox Code Playgroud)

它不喜欢它L,但没有使用它,我怎么能在这个月的最后一天运行?

java quartz-scheduler crontrigger cronexpression

11
推荐指数
1
解决办法
2万
查看次数

找不到"org.springframework.scheduling.quartz.JobDetailBean"弹簧+石英

我的构建路径中包含quartz 1.8.3.jar和Spring 3.0.6 jar,但是在spring + quartz调度的所有教程中出现的包都不可用.在哪里可以找到它?

   "org.springframework.scheduling.quartz.JobDetailBean"
Run Code Online (Sandbox Code Playgroud)

spring scheduling quartz-scheduler

11
推荐指数
1
解决办法
2万
查看次数

如何扩展Quartz调度程序?

我计划使用Quartz调度程序,因为我阅读了很多关于它的好意见.

我的问题如下:在任何给定时间,我将有数千个触发器存在于系统中.大多数触发器只会触发一个事件而死亡.此外,我很可能在分配后取消许多工作(基于新输入).

石英可以扩展到这个吗?建议使用哪个JobStore?我打算在mysql上使用JDBC.

添加信息:我的工作将通过HTTP发送电子邮件或将数据发布到其他服务(通过WAN).

java scaling scalability scheduling quartz-scheduler

10
推荐指数
1
解决办法
6816
查看次数

石英和弹簧 - 聚集但不持久?

在我的Spring应用程序中,我使用的SchedulerFactoryBean是与Quartz集成.我们将要有群集的Tomcat实例,因此我希望拥有一个集群的Quartz环境,这样相同的作业就不会在不同的Web服务器上同时运行.

为此,我的app-context.xml内容如下:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger"/>
            <ref bean="simpleTrigger" />
        </list>
    </property>
    <property name="dataSource" ref="dataSource"/>
    <property name="overwriteExistingJobs" value="true"/>
    <!-- found in applicationContext-data.xml -->
    <property name="applicationContextSchedulerContextKey" value="applicationContext"/>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.scheduler.instanceName">SomeBatchScheduler</prop>
            <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
            <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
            <!--<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>-->
            <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
            <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
            <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
            <prop key="org.quartz.jobStore.isClustered">true</prop>
            <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
            <prop key="org.quartz.threadPool.threadCount">25</prop>
            <prop key="org.quartz.threadPool.threadPriority">5</prop>
        </props>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

一切都运行良好,除了当我尝试删除或更改触发器,然后重新启动我的应用程序时,旧的触发器仍然保留在数据库中,仍然运行.我不希望这样,我只是希望在app停止(或重新启动)时删除它们.我将overwriteExistingJobs属性的值设置为true,因为我认为这就是它所做的.

有任何想法吗?我只想使用数据库进行聚类,而不是任何类型的持久性.

java spring load-balancing quartz-scheduler

10
推荐指数
1
解决办法
6275
查看次数

在我的石英工作中注射

我想知道如何使用guice在我的工作中使用注射.由于我不能在默认构造函数上使用@Inject,我可以直接在属性上使用它(如下所示)(我总是得到一个带有PersonDAO的NullPointerException)?我知道DAO在这里无关,但它只是用于测试.

public class SimpleQuartzJob implements Job {

  @Inject PersonDao Person;

  private static Logger logger = Logger.getLogger(SimpleQuartzJob.class.getName());

  public SimpleQuartzJob() {
  }

  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    if (logger.isDebugEnabled()) logger.debug("In SimpleQuartzJob - executing its JOB at " 
        + new Date() + " by " + context.getTrigger().getName());

        // ... LOGIC ...
  }

} 
Run Code Online (Sandbox Code Playgroud)

在我的模块中,我有以下声明:

bind(PersonDao.class).to(HibernatePersonDaoImpl.class);
Run Code Online (Sandbox Code Playgroud)

实际上我在这里使用PersonDao'因为我知道它在另一个带注入的类中工作(但注入是在那里的构造函数级别完成的).

有人可以给我一个建议吗?

这里有关于quartz config的更多信息:

web.xml中:

  <servlet>  
    <servlet-name>QuartzInitializer</servlet-name>  
    <display-name>Quartz Initializer Servlet</display-name>  
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
    <init-param>  
        <param-name>config-file</param-name>  
        <param-value>/quartz.properties</param-value>  
    </init-param>  
    <init-param>  
        <param-name>shutdown-on-unload</param-name>  
        <param-value>true</param-value>  
    </init-param>  
    <init-param>  
        <param-name>start-scheduler-on-load</param-name>  
        <param-value>true</param-value>  
    </init-param>  
</servlet> …
Run Code Online (Sandbox Code Playgroud)

java servlets guice quartz-scheduler

10
推荐指数
1
解决办法
6061
查看次数

如何禁用Quartz JDBCJobStore中的作业?

在不删除作业或触发记录且不擦除cron表达式的情况下,在JDBCJobStore中禁用作业的最佳方法是什么?

java spring jdbc quartz-scheduler

10
推荐指数
1
解决办法
1万
查看次数

关于在Grails中进行异步处理的简单方法的建议

假设我有一个这样的简单控制器:

class FooController {

  def index = {
     someVeryLongCompution() //e.g crawl a set of web pages
     render "Long computation was launched."
  }
}
Run Code Online (Sandbox Code Playgroud)

当调用索引操作时,我希望该方法在异步运行长计算时立即返回给用户.

我理解最有效的方法是在架构中使用消息代理,但我想知道是否有更简单的方法来实现它.

我尝试了Executor插件,但阻止了http请求返回,直到长计算完成.

我尝试过Quartz插件,但这似乎对周期性任务有好处(除非有办法只运行一次作业?)

你们是如何在Grails中处理这些请求的呢?

grails asynchronous servlets quartz-scheduler

10
推荐指数
2
解决办法
4426
查看次数

Grails和Quartz:类型长的值不好

我正在尝试将石英作业保存到数据库中.我已经设置了表,创建了quartz.properties文件,但是当我尝试运行应用程序时,会出现以下异常:

2012-02-01 17:36:23,708 [main] ERROR context.GrailsContextLoader  - Error executing bootstraps: org.quartz.JobPersistenceException: Couldn't store trigger 'expirationTrigger' for 'com.pldtglobal.svngateway.ExpirationCheckerJob' job:Bad value for type long : \254\355\000\005sr\000\025org.quartz.JobDataMap\237\260\203\350\277\251\260\313\002\000\000xr\000&org.quartz.utils.StringKeyDirtyFlagMap\202\010\350\303\373\305](\002\000\001Z\000\023allowsTransientDataxr\000\035org.quartz.utils.DirtyFlagMap\023\346.\255(v\012\316\002\000\002Z\000\005dirtyL\000\003mapt\000\017Ljava/util/Map;xp\001sr\000\021java.util.HashMap\005\007\332\301\303\026`\321\003\000\002F\000\012loadFactorI\000\011thresholdxp?@\000\000\000\000\000\014w\010\000\000\000\020\000\000\000\001t\000'org.grails.plugins.quartz.grailsJobNamet\000.com.pldtglobal.svngateway.ExpirationCheckerJobx\000 [See nested exception: org.postgresql.util.PSQLException: Bad value for type long : \254\355\000\005sr\000\025org.quartz.JobDataMap\237\260\203\350\277\251\260\313\002\000\000xr\000&org.quartz.utils.StringKeyDirtyFlagMap\202\010\350\303\373\305](\002\000\001Z\000\023allowsTransientDataxr\000\035org.quartz.utils.DirtyFlagMap\023\346.\255(v\012\316\002\000\002Z\000\005dirtyL\000\003mapt\000\017Ljava/util/Map;xp\001sr\000\021java.util.HashMap\005\007\332\301\303\026`\321\003\000\002F\000\012loadFactorI\000\011thresholdxp?@\000\000\000\000\000\014w\010\000\000\000\020\000\000\000\001t\000'org.grails.plugins.quartz.grailsJobNamet\000.com.pldtglobal.svngateway.ExpirationCheckerJobx\000]
org.codehaus.groovy.runtime.InvokerInvocationException: org.quartz.JobPersistenceException: Couldn't store trigger 'expirationTrigger' for 'com.pldtglobal.svngateway.ExpirationCheckerJob' job:Bad value for type long : \254\355\000\005sr\000\025org.quartz.JobDataMap\237\260\203\350\277\251\260\313\002\000\000xr\000&org.quartz.utils.StringKeyDirtyFlagMap\202\010\350\303\373\305](\002\000\001Z\000\023allowsTransientDataxr\000\035org.quartz.utils.DirtyFlagMap\023\346.\255(v\012\316\002\000\002Z\000\005dirtyL\000\003mapt\000\017Ljava/util/Map;xp\001sr\000\021java.util.HashMap\005\007\332\301\303\026`\321\003\000\002F\000\012loadFactorI\000\011thresholdxp?@\000\000\000\000\000\014w\010\000\000\000\020\000\000\000\001t\000'org.grails.plugins.quartz.grailsJobNamet\000.com.pldtglobal.svngateway.ExpirationCheckerJobx\000 [See nested exception: org.postgresql.util.PSQLException: Bad value for type long : \254\355\000\005sr\000\025org.quartz.JobDataMap\237\260\203\350\277\251\260\313\002\000\000xr\000&org.quartz.utils.StringKeyDirtyFlagMap\202\010\350\303\373\305](\002\000\001Z\000\023allowsTransientDataxr\000\035org.quartz.utils.DirtyFlagMap\023\346.\255(v\012\316\002\000\002Z\000\005dirtyL\000\003mapt\000\017Ljava/util/Map;xp\001sr\000\021java.util.HashMap\005\007\332\301\303\026`\321\003\000\002F\000\012loadFactorI\000\011thresholdxp?@\000\000\000\000\000\014w\010\000\000\000\020\000\000\000\001t\000'org.grails.plugins.quartz.grailsJobNamet\000.com.pldtglobal.svngateway.ExpirationCheckerJobx\000]
    at org.grails.tomcat.TomcatServer.start(TomcatServer.groovy:212)
    at grails.web.container.EmbeddableServer$start.call(Unknown Source)
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy:158)
    at _GrailsRun_groovy$_run_closure5_closure12.doCall(_GrailsRun_groovy)
    at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:280)
    at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
    at _GrailsRun_groovy$_run_closure5.doCall(_GrailsRun_groovy:149)
    at _GrailsRun_groovy$_run_closure5.call(_GrailsRun_groovy)
    at _GrailsRun_groovy.runInline(_GrailsRun_groovy:116) …
Run Code Online (Sandbox Code Playgroud)

grails quartz-scheduler

10
推荐指数
3
解决办法
3782
查看次数

石英调度程序示例程序给出错误

我正在尝试运行roseindi.net上提供的用于石英调度的示例helloworld程序 http://www.roseindia.net/quartz/quartz-scheduler-tutorial.shtml

我在两个类中给出了类似于我的java projecy中的类似设置,石英版本1.6 - 项目库中的all.jar.当我尝试运行应用程序时,我得到以下异常

Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/UserTransaction
    at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:1104)
    at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1355)
    at oiaoerpdataconnector.HelloSchedule.HelloScheduleRun(HelloSchedule.java:25)
    at oiaoerpdataconnector.HelloSchedule.main(HelloSchedule.java:37)
Caused by: java.lang.ClassNotFoundException: javax.transaction.UserTransaction
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 4 more
Java Result: 1
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?
谢谢,
Priyank

java quartz-scheduler

10
推荐指数
1
解决办法
7118
查看次数

如何将Quartz Scheduler连接到Spring上下文中?

我有一个应用程序,我想使用Quartz Scheduler对象.我已经阅读了关于这个的Spring文档,他们建议使用SchedulerFactoryBean这样的:

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="autoStartup">
        <value>true</value>
    </property>
    <property name="configLocation" value="classpath:quartz.properties" />
</bean>
Run Code Online (Sandbox Code Playgroud)

配置如下所示:

org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = MyQuartzScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
log4j.rootLogger=INFO, stdout
log4j.logger.org.quartz=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
Run Code Online (Sandbox Code Playgroud)

现在,如果我想注入schedulerFactoryBean我的一个对象,我得到一个异常说明:

Could not convert constructor argument value of type [org.quartz.impl.StdScheduler] to required type [org.springframework.scheduling.quartz.SchedulerFactoryBean]:

为什么我得到一个StdScheduler而不是一个schedulerFactoryBean?我错过了配置步骤吗?

java spring quartz-scheduler

10
推荐指数
1
解决办法
2万
查看次数