我需要在我们的网站上提供行动/活动的安排.垃圾比喻可以是日历系统,其中一个人添加日历项目,并且当日期/时间被"命中"时,则触发一些逻辑(例如,计算报告).
我可能会有数百甚至数千个由我的客户输入的预定活动.当客户输入要安排的内容时,我会将该信息保存到数据库中.然后我猜我会在某处添加一个事件/作业,它将包含数据库表主键.当事件被触发时,我将从数据库中获取该信息,然后执行逻辑.完成.
有哪些常见解决方案可以解决这个问题?
我正在使用.NET 3.5 SP1.DB是Sql Server 2008.但UI将基于Web.
我不确定人们是否使用MSMQ?或者内置在Sql Server中的东西?或者一些带有NT服务的开源库(例如Quartz.NET).服务器将是windows 2008标准版.
另外 - 请不要使用等效的cron作业或任何命令行脚本等建议.
最后,这是次要的目标..我喜欢把它扔到天蓝色的地方为shiz和giggles ......所以也可能吗?这只是一个愿望清单的想法.如果解决方案比使用Azure更容易,我宁愿在专用盒子上进行.
欢呼:)
编辑:需要触发事件时要处理的逻辑,是后台作业.无需UI.
我已经问过一个关于如何在Java中创建时间触发事件的单独问题.我被介绍给Quartz.与此同时,我也在网上谷歌,人们cron在Unix 中说是一个很好的解决方案.
哪一个更好?什么是缺点和优点?
系统的一些规范:*用Java编写的Unix OS*程序*我有一个包含1000多个条目的任务队列,对于每个时间戳,最多可触发500个任务.
我使用Quartz构建一个集群ThreadPool,我有许多任务在不同时间运行.什么是在集群ThreadPool上内置并且只运行一次任务的最佳方法.我知道我可以将任务设置为高优先级.但注册"一次性"任务的最佳方法是什么?
我正在尝试研究如何为我正在编写的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的硬依赖.
我有以下情况:
计划运行的8个任务org.quartz.threadPool.threadCount设置为5.
但实际上我可以看到所有8个任务都在运行.
这怎么可能?
如果我设置org.quartz.threadPool.threadCount=5并且我提交了10个石英任务,那么只有5个任务并行运行?
org.quartz.threadPool.threadCount财产是什么意思?
我有这样的设计:
org.quartz.threadPool.threadCount设置为5的SchedulerFactoryBean进行配置.谢谢.
我试图得到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) 给出Quartz作业和以下命令
boolean deleted = scheduler.deleteJob(event.getName(), "some group name")
Run Code Online (Sandbox Code Playgroud)
假设deleted回来false,据我所知,这意味着从JVM的角度来看,工作仍然存在.
有了这2个问题:
如果没有抛出异常,是否可以安全地假设找不到工作?什么会导致这个?这种情况发生的唯一方法不是首先删除作业吗?
我在用
<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) 我正在构建一个执行计划任务的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) 我有一些在Schedule上运行的Quartz.Net作业
scheduler.ScheduleJob(
new JobDetailImpl("MarkAsSolutionReminderJob", typeof(MarkAsSolutionReminderJob)),
new CalendarIntervalTriggerImpl("MarkAsSolutionReminderJobTrigger", IntervalUnit.Hour, 6));
Run Code Online (Sandbox Code Playgroud)
我可以在需要时手动触发此作业运行吗?
所以它继续正常运行,但在一段特定的代码中,我可能只想将它运行一次或两次.但它不影响预定的工作?
我有一份工作需要在不同的时间每天执行两次.例如10:00和15:30.我怎样才能实现这一目标?
我很困惑,因为时间上的分钟不同.对于11:00和15:00它很容易,因为对于两个时间,分钟部分是相同的,但对于不同的分钟部分是否可行与cron?
在此先感谢并为愚蠢的问题道歉.
quartz-scheduler ×10
java ×5
cron ×2
quartz.net ×2
spring ×2
.net ×1
hazelcast ×1
scheduling ×1
spring-mvc ×1