标签: quartz-scheduler

JBoss AS 6中的QuartzScheduler注入

如何在JBoss AS 6上将QuartzScheduler服务注入我的无状态bean?Quartz服务确实在JBoss AS 6启动期间启动

00:58:38,025 INFO  [QuartzScheduler] Scheduler meta-data: Quartz Scheduler (v1.8.3) 'JBossQuartzScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.

00:58:38,026 INFO  [StdSchedulerFactory] Quartz scheduler 'JBossQuartzScheduler' initialized from an externally opened InputStream.
00:58:38,026 INFO  [StdSchedulerFactory] Quartz scheduler version: 1.8.3
Run Code Online (Sandbox Code Playgroud)

我试过这个:

@Stateless(name="myEnterpriseScheduler")
public class MyEnterpriseScheduler { …
Run Code Online (Sandbox Code Playgroud)

java jboss ejb quartz-scheduler java-ee-6

6
推荐指数
1
解决办法
3672
查看次数

Apache Tomee中的EJB-3.1 @Startup和@Schedule anotation用于定时器执行

我有以下代码在Apache-tomee上运行,我使用eclipse进行编码,我想在应用程序启动时使用@Schedule注释运行我的简单调度作业.

@Startup
@Singleton
public class ScheduleEJB {
    private static int count = 0;
    @Schedule(second="*/10", minute="*", hour="*", info="MyTimer")
    public void execute() {
       System.out.println("its running count..."+count);
       count++;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在Tomee上部署此代码时,它会让我听到以下消息并且无法在启动时自动运行我的调度方法execute(),因为此代码在glassfish中工作正常,但我不会使用它或者是jboss的glassfish.

2012年12月21日上午9:59:45 org.quartz.impl.StdSchedulerFactory实例化
INFO:使用ThreadExecutor的默认实现
2012年12月21日上午9:59:45 org.quartz.core.SchedulerSignalerImpl
INFO:类型的初始化调度程序信号器: class org.quartz.core.SchedulerSignalerImpl
2012年12月21日上午9:59:45 org.quartz.core.QuartzScheduler
信息:Quartz Scheduler v.2.1.6创建.
2012年12月21日上午9:59:45 org.quartz.simpl.RAMJobStore初始化
INFO:RAMJobStore已初始化.
2012年12月21日上午9:59:45 org.quartz.core.QuartzScheduler初始化
INFO:调度程序元数据:Quartz调度程序(v2.1.6)'OpenEJB-TimerService-Scheduler'与instanceId'OpenEJB' 调度程序类:'org. quartz.core.QuartzScheduler' - 在本地运行. 没有开始. 目前处于待机模式. 执行的作业数:0 使用线程池'org.apache.openejb.core.timer.DefaultTimerThreadPoolAdapter' - 带0个线程. 使用job-store'org.quartz.simpl.RAMJobStore' - 它不支持持久性.并没有聚集. 2012年12月21日上午9:59:45 org.quartz.impl.StdSchedulerFactory实例化 INFO:从外部提供的属性实例初始化的Quartz调度程序'OpenEJB-TimerService-Scheduler'. 2012年12月21日上午9:59:45 org.quartz.impl.StdSchedulerFactory实例化 INFO:Quartz调度程序版本:2.1.6 2012年12月21日上午9:59:45 org.quartz.core.QuartzScheduler启动 INFO:Scheduler OpenEJB- TimerService-Scheduler _ $ _ OpenEJB启动. 2012年12月21日上午9:59:45 org.apache.openejb.assembler.classic.Assembler createApplication INFO:创建Ejb …

schedule quartz-scheduler java-ee-6 ejb-3.1 apache-tomee

6
推荐指数
1
解决办法
2727
查看次数

具有新触发器集的Quartz.NET重新计划作业

我有一个Quartz作业,该作业计划有一组触发器,执行时间为3到5分钟。但是在将来的任何时候(可能是一周后或几分钟后),我可能都需要使用新的触发器集重新安排它的时间。触发器集上会有一些添加或删除。

如何使用新的触发器集重新计划作业?这里的窍门是,我想确保当时没有活着的工作实例,这样我就可以可靠地重新计划我的工作了。谢谢你的帮助...

.net c# quartz-scheduler job-scheduling

6
推荐指数
1
解决办法
5266
查看次数

使用SQL Server AdoJobStore配置Quartz.NET

我在尝试让Quartz.NET与AdoJobStore一起工作时遇到了麻烦.这里没有其他问题似乎遇到了我的问题.我能够在没有AdoJobStore配置的情况下使其工作正常,但最终会保留所有内容,但是在尝试GetScheduler()我无法弄清楚时会遇到错误.

这是我的石英app.config部分:

<quartz>
   <add key="quartz.scheduler.instanceName" value="XxxDefaultQuartzScheduler"/>
   <add key="quartz.scheduler.instanceId" value="instance_one"/>

   <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
   <add key="quartz.threadPool.threadCount" value="10"/>
   <add key="quartz.threadPool.threadPriority" value="1"/>

   <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"/>
   <add key="quartz.jobStore.misfireThreshold" value="60000"/>      
   <add key="quartz.jobStore.dataSource" value="default"/>
   <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz"/>        
   <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"/>
   <add key="quartz.jobStore.tablePrefix" value="QRTZ_"/>

   <add key="quartz.dataSource.default.connectionString" value="Server=(local);Database=Quartz;UID=XXXX;PWD=XXXX"/>
   <add key="quartz.dataSource.default.provider" value="SqlServer-20"/>
   <add key="quartz.dataSource.useProperties" value="true"/>
</quartz>
Run Code Online (Sandbox Code Playgroud)

这是相关的初始化代码:

var config = (NameValueCollection) ConfigurationManager.GetSection("quartz");

ISchedulerFactory factory = new StdSchedulerFactory(config);

// This is where an ArgumentOutOfRange exception occurs:
IScheduler scheduler = factory.GetScheduler();
Run Code Online (Sandbox Code Playgroud)

而我得到的错误是ArgumentOutOfRangeException: …

.net c# quartz-scheduler quartz.net

6
推荐指数
1
解决办法
6920
查看次数

Spring是否内置于Scheduler中.

我遇到了一个必须使用持久性调度程序的情况,因为我有一个Web应用程序可能因某些问题而崩溃或关闭,并且如果发生这种情况可能会丢失它的作业详细信息.我尝试过以下方法:

  • 使用Quartz调度程序:

RAMJobStore首先使用,但由于它不是持久性的,所以没有多大帮助.无法设置JDBCJobStore因为,这将需要对我现有的代码库进行大量代码更改.鉴于这种情况,我有以下问题:

  • 如果我使用Spring的内置@Schedule注释,我的工作会持久 ......?我不介意在应用程序启动后是否安排了作业.我想要的就是不失去细节和触发器的工作.
  • 如果没有,是否还有其他可以遵循的替代方案,请记住我需要使用我的调度程序安排多个作业.
  • 如果,我怎样才能做到这一点.我的触发器每个工作都不同.例如,我可能有一份工作安排在上午9点,另一份工作安排在上午8点30分,依此类推.
  • 如果不是调度程序,那么我可以有一个机制来处理这个.

有一点,我发现Quartz的文档不是很具描述性.我的意思是它适用于顶级配置,但在应用程序上配置它是一件痛苦的事.这只是一个侧面说明.与这个问题无关.

感谢帮助.:)

java spring scheduled-tasks quartz-scheduler

6
推荐指数
2
解决办法
4402
查看次数

使用Topshelf执行多个Quartz.NET作业

我试图使用C#在Quartz.NET和Topshelf上运行多个作业.

HostFactory.Run(c =>
{
    c.ScheduleQuartzJobAsService(q =>
        q.WithJob(() => JobBuilder.Create<TypeA>().Build())
        .AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
        ).StartAutomatically().
        ScheduleQuartzJobAsService(r => 
        r.WithJob(() => JobBuilder.Create<TypeB>().Build())
        .AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
            WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
            ).StartAutomatically();
    c.StartAutomatically();
    c.SetServiceName("ServiceName");
});
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,只执行TypeB中的execute方法.我也尝试过:

HostFactory.Run(c =>
{
    c.ScheduleQuartzJobAsService(q =>
        q.WithJob(() => JobBuilder.Create<TypeA>().Build())
        .AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
            WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
        ).StartAutomatically();
    c.StartAutomatically();
    c.SetServiceName("Service1");

    c.ScheduleQuartzJobAsService(r =>
        r.WithJob(() => JobBuilder.Create<TypeB>().Build())
        .AddTrigger(() => TriggerBuilder.Create().WithSimpleSchedule(builder => builder.
            WithIntervalInSeconds(ConfigurationSettings.AppFrequencyInSeconds).RepeatForever()).Build())
        ).StartAutomatically();
    c.StartAutomatically();
    c.SetServiceName("Service2");
});
Run Code Online (Sandbox Code Playgroud)

使用此代码,仅调用TypeB中的execute方法.我的类TypeA和TypeB都有'Execute'方法,这些方法是每个类的入口点(如果它们是作业的一部分,它们会被调用).似乎第二个服务代码是总是被调用的服务代码 - 如果我交换这两个ScheduleQuartzJobAsService调用的顺序,它总是在第二个调用中执行的类.

如何编写HostFactory.Run方法,以便同时执行两个作业?

c# quartz-scheduler quartz.net topshelf

6
推荐指数
1
解决办法
7121
查看次数

Cron表达式验证器

我想在我的程序中有用户定义的cron表达式.是否有cron表达式的验证器,以便用户无法插入无效的cron代码?

NB我认为Quartz.Net上的cron表达式与UNIX中使用的格式略有不同.我想要它的Quartz版本.

c# cron schedule quartz-scheduler quartz.net

6
推荐指数
1
解决办法
5428
查看次数

如何使用MariaDB正确配置集群Quartz

我们有一个集群石英配置,有8个地理分布的节点,所有节点都由MariaDB的单个实例支持.我们反复观察到以下错误:

2018-04-26 00:14:01,186 [censored_QuartzSchedulerThread] ERROR org.quartz.core.ErrorLogger - An error occurred while firing triggers '[Trigger 'DEFAULT.a563a68e-b30d-4dab-b24f-540c5fa0cef8':  triggerClass: 'org.quartz.impl.triggers.CronTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Thu Apr 26 00:11:00 EDT 2018]'
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: (conn:83) Lock wait timeout exceeded; try restarting transaction
Query is: SELECT * FROM QRTZ_LOCKS WHERE SCHED_NAME = 'censored' AND LOCK_NAME = ? FOR UPDATE, parameters ['TRIGGER_ACCESS']
        at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:157)
        at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3792)
        at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggersFired(JobStoreSupport.java:2912)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:336)
Caused by: java.sql.SQLException: (conn:83) Lock wait timeout exceeded; try restarting …
Run Code Online (Sandbox Code Playgroud)

quartz-scheduler mariadb quartz

6
推荐指数
0
解决办法
535
查看次数

javax.resource.ResourceException:事务不活跃:

在两三天后的生产中,我们开始收到以下异常:

org.jboss.util.NestedSQLException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f572ada:f5ff:52482a05:11a4 status: ActionStatus.ABORTED >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f572ada:f5ff:52482a05:11a4 status: ActionStatus.ABORTED >)
                at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:95)
                at com.rwsol.syb.persistence.jdbc.JDBCDataStore.getPhysicalConnection(JDBCDataStore.java:146)
                ... 10 more
Caused by: javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: -3f572ada:f5ff:52482a05:11a4 status: ActionStatus.ABORTED >
                at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:370)
                at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:496)
                at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941)
                at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89)
Run Code Online (Sandbox Code Playgroud)

我们正在为所有夜间石英作业使用专用的批处理服务器。由于这个问题,我们需要每 4-5 天重启一次批处理。2-3 天后,一个作业失败,然后第二天 2-3 个作业失败,最后 4-5 天后所有作业失败。

我曾尝试增加事务超时但没有成功。

请帮助我解决这个问题。

java jobs transactions quartz-scheduler

5
推荐指数
0
解决办法
2708
查看次数

无法存储名称为:'trigger1' 和组:'group1' 的触发器,因为已存在具有此标识的触发器

在石英中引用删除触发器

我遇到了同样的问题:无法存储名称为:'schedulerJobTrigger' 和组:'group1' 的触发器,因为已经存在具有此标识的触发器。

所以在我考虑取消工作安排之前,我有一个查询:

假设我有 2 个工作.. 详细信息如下: 工作 1:今天开始时间 @ 17:30,每 5 分钟后重复两次工作 2:今天开始时间 @ 17:37

因此,如果我在 17:30 执行后取消调度作业(应该删除触发器)并执行 Job2,那么调度程序将如何运行需要分别在 @17:35 和 17:40 运行的 Job1(这是重复)

谢谢,请帮忙!

在尝试上述场景之前,即使我用不同的日程安排了一个新工作@ scheduler.scheduleJob(job, trigger); 它给了我一个例外:无法存储名称为:'schedulerJobTrigger' 和组:'group1' 的触发器,因为已经存在具有此标识的触发器。

cron scheduler quartz-scheduler crontrigger

5
推荐指数
1
解决办法
7072
查看次数