标签: quartz-scheduler

如何在.NET中执行基于时间/预定的事件?

我需要在我们的网站上提供行动/活动的安排.垃圾比喻可以是日历系统,其中一个人添加日历项目,并且当日期/时间被"命中"时,则触发一些逻辑(例如,计算报告).

我可能会有数百甚至数千个由我的客户输入的预定活动.当客户输入要安排的内容时,我会将该信息保存到数据库中.然后我猜我会在某处添加一个事件/作业,它将包含数据库表主键.当事件被触发时,我将从数据库中获取该信息,然后执行逻辑.完成.

有哪些常见解决方案可以解决这个问题?

我正在使用.NET 3.5 SP1.DB是Sql Server 2008.但UI将基于Web.

我不确定人们是否使用MSMQ?或者内置在Sql Server中的东西?或者一些带有NT服务的开源库(例如Quartz.NET).服务器将是windows 2008标准版.

另外 - 请不要使用等效的cron作业或任何命令行脚本等建议.

最后,这是次要的目标..我喜欢把它扔到天蓝色的地方为shiz和giggles ......所以也可能吗?这只是一个愿望清单的想法.如果解决方案比使用Azure更容易,我宁愿在专用盒子上进行.

欢呼:)

编辑:需要触发事件时要处理的逻辑,是后台作业.无需UI.

.net scheduling scheduled-tasks quartz-scheduler

8
推荐指数
1
解决办法
4281
查看次数

时间触发工作Cron或Quartz?

我已经问过一个关于如何在Java中创建时间触发事件单独问题.我被介绍给Quartz.与此同时,我也在网上谷歌,人们cron在Unix 中说是一个很好的解决方案.

哪一个更好?什么是缺点和优点?

系统的一些规范:*用Java编写的Unix OS*程序*我有一个包含1000多个条目的任务队列,对于每个时间戳,最多可触发500个任务.

java cron quartz-scheduler

8
推荐指数
1
解决办法
6001
查看次数

立即使用Quartz进行一次任务

我使用Quartz构建一个集群ThreadPool,我有许多任务在不同时间运行.什么是在集群ThreadPool上内置并且只运行一次任务的最佳方法.我知道我可以将任务设置为高优先级.但注册"一次性"任务的最佳方法是什么?

java quartz-scheduler

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

结合Spring,Quartz Scheduling和Hazelcast

我正在尝试研究如何为我正在编写的webapp开发一个合理可扩展的批处理框架.

我使用Spring MVC作为webapp,使用自定义DAO层(为了访问数据库,需要从UnitOfWorkFactory构造UnitOfWork实例,该UnitOfWorkFactory设置为@Autowired并由Spring在运行时注入).

我使用Spring Scheduler注释(@Scheduled)来安排任务,但是我希望这些任务在我的集群中的不同机器上运行.每个批处理作业应由其中一个集群计算机选取,然后执行.

Hazelcast似乎非常适合这一点,因为分布式执行设计看起来非常简单和优雅.

我遇到的问题似乎没有被文档覆盖.我已经阅读了有关Spring Integration的文档,但是这似乎集中在如何使用Spring配置Hazelcast(我已经完成).

当调度程序指示要启动任务时,我想创建任务的新实例(Callable实例)并将其提交给DistributedExecutor.当集群机器收到要运行的任务时,我需要集群机器上的Spring容器在任务尝试执行它之前将UnitOfWorkFactory实例注入批处理任务.每个集群都以Spring开头,并且已经使用正确的细节实例化了UnitOfWorkFactory,问题在于将UnitOfWorkFactory实例注入到我的任务中.

有没有人知道如何配置我的应用程序,以便Hazelcast可以在Callable启动时自动注入UnitOfWorkFactory?我已经尝试将Callable标记为Serializable和ApplicationContextAware,但在尝试运行任务时仍然会得到NullPointerException.

我可以直接访问ApplicationContext,但是我不愿意这样做,因为它会限制我的任务的可测试性,并为我的批处理作业引入了对Spring的硬依赖.

spring quartz-scheduler hazelcast

8
推荐指数
1
解决办法
4007
查看次数

Quartz调度程序最大线程计数属性

我有以下情况:

计划运行的8个任务org.quartz.threadPool.threadCount设置为5.

但实际上我可以看到所有8个任务都在运行.

这怎么可能?

如果我设置org.quartz.threadPool.threadCount=5并且我提交了10个石英任务,那么只有5个任务并行运行?

org.quartz.threadPool.threadCount财产是什么意思?

我有这样的设计:

  1. 我们有一些任务可以在db中对实体进行一些工作
  2. 我们有特殊的JobRunner执行一项任务
  3. 我们扫描要运行的任务,并安排在Quartler服务中运行的任务,该服务使用org.quartz.threadPool.threadCount设置为5的SchedulerFactoryBean进行配置.
  4. 据我了解,如果使用SchedulerFactoryBean的石英服务将运行5个任务,并且如果我们将尝试安排其他任务石英本身应该抛出异常.这是真的?

谢谢.

java quartz-scheduler

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

Java:Spring/Quartz:基本教程代码不起作用

我试图得到Spring和Quartz的基本示例.以下是我关注的教程:http://www.mkyong.com/spring/spring-quartz-scheduler-example/

我已经完全按照我的意思复制了所有内容,但是在输出窗口中没有看到任何内容.

弹簧quartz.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="runMeTask" class="com.ksc.jobs.RunMeTask" />

    <!-- Spring Quartz -->
    <bean name="runMeJob" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.ksc.jobs.RunMeJob" />
        <property name="jobDataAsMap">
            <map>
                <entry key="runMeTask" value-ref="runMeTask" />
            </map>
        </property>

    </bean>

    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="runMeJob" />
        <property name="repeatInterval" value="5000" />
        <property name="startDelay" value="1000" />

    </bean>

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobDetails">
            <list>
                <ref bean="runMeJob" />
            </list>
        </property>

        <property name="triggers">
            <list>
                <ref bean="simpleTrigger" />
            </list>
        </property>
    </bean>

</beans>
Run Code Online (Sandbox Code Playgroud)

applicationContext.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc quartz-scheduler

8
推荐指数
1
解决办法
4985
查看次数

Quartz无法删除作业,现在是什么?

给出Quartz作业和以下命令

boolean deleted = scheduler.deleteJob(event.getName(), "some group name")
Run Code Online (Sandbox Code Playgroud)

假设deleted回来false,据我所知,这意味着从JVM的角度来看,工作仍然存在.

有了这2个问题:

  1. 是否可以强制删除作业?
  2. 什么事件阻止Quartz删除作业?

如果没有抛出异常,是否可以安全地假设找不到工作?什么会导致这个?这种情况发生的唯一方法不是首先删除作业吗?

我在用

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>1.8.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

这是否会成为处理事情的正确方法?我的推理是否正确?

    boolean deleted;
    try {
        deleted = scheduler.deleteJob(event.getName(), "some group name");
        if (!deleted) {
            logger.warn("Quartz failed to delete the job!" + event.getName() + ". Job not found");
        }
    } catch (SchedulerException e) {
        logger.error("There is an internal Scheduler error", e);
    }
Run Code Online (Sandbox Code Playgroud)

java quartz-scheduler

8
推荐指数
1
解决办法
8142
查看次数

让Quartz.net忽略失火

我正在构建一个执行计划任务的Windows服务,该任务使用Quartz.net定期处理命令队列(来自遗留系统)(每分钟一次)

如果任务花费的时间超过1分钟,这可能是不寻常的,但在某些情况下是可能的,我希望它能够简单地忽略它错过触发的触发器.

但是我似乎无法实现这一点.它进行处理,然后快速连续快速触发它错过的所有触发器.据我了解,你可以为失火设定一个门槛,但我似乎无法让这个工作.

我在作业上使用[DisallowConcurrentExecution()]以确保任何时候只有一个作业实例在运行.

下面是几个片段.首先传递一些配置信息 - 这是你如何设置失火阈值?

    NameValueCollection config = new NameValueCollection();
    config.Add("quartz.jobStore.misfireThreshold", "600000");

    schedFact = new StdSchedulerFactory(config);
Run Code Online (Sandbox Code Playgroud)

使用我认为是Ignore失火的正确设置来构建触发器:

    var trigger = TriggerBuilder.Create()
                    .WithIdentity("trigger1", "group1")
                    .StartNow()
                    .WithSimpleSchedule(   x => x.WithMisfireHandlingInstructionIgnoreMisfires()
                    .WithIntervalInSeconds(60)
                    .RepeatForever())
                    .Build();
Run Code Online (Sandbox Code Playgroud)

非常感谢.

工作代码:此时只是玩粗略的想法,所以只需在控制台应用程序中运行并随机延迟一个工作,这样就可以在10秒钟内完成拍摄.在几次延迟之后,所有备份的失火都会连续发射.

[DisallowConcurrentExecution()]
public class SomeJob : IJob
{
    public SomeJob() { }
    public void Execute(IJobExecutionContext context)
    {
        Random rnd = new Random(DateTime.UtcNow.Second);
        int delay = rnd.Next(2);
        Console.WriteLine("Executing Job with delay of "+ delay + "  at " + DateTime.UtcNow.ToString());

        if (delay == 1)
        {
            System.Threading.Thread.Sleep(1000 * …
Run Code Online (Sandbox Code Playgroud)

quartz-scheduler quartz.net

8
推荐指数
1
解决办法
3485
查看次数

Quartz.Net触发器预定作业点播

我有一些在Schedule上运行的Quartz.Net作业

scheduler.ScheduleJob(
new JobDetailImpl("MarkAsSolutionReminderJob", typeof(MarkAsSolutionReminderJob)),
new CalendarIntervalTriggerImpl("MarkAsSolutionReminderJobTrigger", IntervalUnit.Hour, 6));
Run Code Online (Sandbox Code Playgroud)

我可以在需要时手动触发此作业运行吗?

所以它继续正常运行,但在一段特定的代码中,我可能只想将它运行一次或两次.但它不影响预定的工作?

quartz-scheduler quartz.net

8
推荐指数
1
解决办法
5871
查看次数

Cron表达在不同时间每天跑两次?

我有一份工作需要在不同的时间每天执行两次.例如10:00和15:30.我怎样才能实现这一目标?

我很困惑,因为时间上的分钟不同.对于11:00和15:00它很容易,因为对于两个时间,分钟部分是相同的,但对于不同的分钟部分是否可行与cron?

在此先感谢并为愚蠢的问题道歉.

cron quartz-scheduler

8
推荐指数
2
解决办法
9898
查看次数