我们使用Quartz.Net来安排大约200个重复工作.每个作业使用相同的IJob实现类,但它们可以具有不同的日程表.在实践中,他们最终有相同的时间表,因此我们有大约200个工作细节,每个细节都有自己的(相同的)重复/简单触发器,已安排.间隔是一个小时.
此作业执行的任务是下载rss源,然后下载链接到rss源中的所有媒体文件.在下载之前,它会擦除放置文件的目录.单次运行需要几秒到十几秒(偶尔会更多).
我们的调度方法是在新的StdSchedulerFactory上调用GetScheduler()(所有作业一次调度到同一个IScheduler实例中).我们通过立即Start()来遵循调度.
工作似乎运行良好,但经过仔细检查,我们发现偶尔 - 或几乎从未 - 运行的少数工作.
因此,例如,所有200个工作岗位应该在今晚6点40分运行.大多数人都这样做了.但少数没有.我通过查看文件时间戳来确定这一点,如果作业运行,它肯定会更新(因为它删除并重新下载文件).
我已经启用了Quartz.Net日志记录,并且还为我们的代码添加了很多日志记录语句.
我得到了一些日志消息,表明Quartz正在创建并执行一轮工作开始后大约一分钟的工作.
之后,所有活动都会停止.没有作业运行,也没有创建日志消息.零.
然后,在下一个发射间隔,Quartz再次启动,我的日志文件更新,各种文件开始下载.但是 - 它肯定看起来像一些JobDetail实例永远不会成为行的首脑(可以这么说)或者很少这样做.在整个周末,一些工作似乎经常更新,最近,其他人自周五开始流程后没有更新一次(它运行在Windows服务shell,顺便说一下).
所以...我希望有人可以帮助我理解Quartz的这种行为.
我需要确定每个工作都在运行.如果错过了触发器,我需要Quartz尽快运行它.通过阅读文档,我认为这将是默认行为 - 对于具有无限重复计数的SimpleTrigger,如果错过触发器窗口,它将重新安排作业以立即执行.似乎并非如此.有什么方法可以确定为什么Quartz没有解雇这些工作?我正在跟踪级别,他们只是不在那里.它创建并执行了大量的工作,但如果我注意到一个缺失 - 我可以找到的是它最后一次运行它(例如,有时它没有运行数小时或数天).没有关于它被跳过的原因(我希望Quartz能够记录某些内容,如果它因任何原因而跳过某个工作),等等.
任何帮助真的,真的很感激 - 我花了一整天时间试图解决这个问题.
我使用跟随CGPathAddEllipseInRect的CAKeyframeAnimation围绕圆圈制作UIView.但是,视图似乎总是在同一个地方开始,无论它最初定位在哪个帧中.是否有某种方法可以调整路径上视图的起始位置?
谢谢!
CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
myAnimation.fillMode = kCAFillModeForwards;
myAnimation.repeatCount = 5;
myAnimation.calculationMode = kCAAnimationPaced;
myAnimation.duration = 10.0;
CGMutablePathRef animationPath = CGPathCreateMutable();
CGPathAddEllipseInRect(animationPath, NULL, rect);
myAnimation.path = animationPath;
CGPathRelease(animationPath);
[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"];
Run Code Online (Sandbox Code Playgroud) 开发iPad PDF-Reader我们决定准备渲染密集页面的高分辨率图像(其中包含许多路径),并使用这些图像而不是pdf页面来避免性能问题.我们认为这3*768 by 3*1024是可读性和渲染性能之间的良好折衷,这导致~1.5 MB的jpeg.
但是,我们测试了两个用于显示图像页面的实现.一个使用CATiledLayer子类,它也负责处理"普通"PDF页面(绘图CGContextDrawImage)和另一个使用UIImageView.后者的优点是显示和缩放非常快,但内存使用非常糟糕 - 内存大约需要30 MB(这与图像的位图大小一致).另一种方法(CATiledLayer)需要更多时间来首次显示页面,并且在缩放后需要另外两秒钟来重新渲染(类似于pdf页面,但速度要快得多)但是不会占用比显示更小图像所需的更多内存或PDF页面.
有谁知道幕后发生了什么,如果可以通过使用Quartz Framework 将低内存使用率CGContextDrawImage和高性能结合起来UIImageView.
我已经安装了 Quartz .NET 并创建了 Quartz 数据库。我需要使用我自己的自定义数据扩展 Quartz 作业存储。例如,当我通过 Quartz API 添加作业时,我需要在同一个数据库事务中向我自己的自定义表添加附加信息。我知道 Quartz 中有一个名为 JobStoreCMT 的类,但是我找不到任何简洁的示例来展示如何为 Quartz 提供 NHibernate 创建的事务。
我一直在寻找我公司当前批处理系统(java SE + crontab)的替代品,因为有很多java代码/ shell脚本重复,大多数工作都是ETL并且做了非常相似的步骤而且我想提供平台独立而不是依赖于crontab,更具体的是我们的工作角色,当前的创造就业步骤是这样的:
大部分相同的逻辑被设计和开发成一个系统,其中包含通用例程,这些程序或"接口"(即他们在那里称之为)是独立完成的(通常使用复制粘贴代码,因为大多数例程都相似),但我我仍然缺少一个非常重要的部分,我需要帮助,这涉及我使用的调度程序实现,我需要它来满足这两个需求之一:
- 我想保证每当我停止调度服务器进行系统更新(由于添加了新的工作等)或其他原因时,那些由于系统停机而无法运行的作业(例如3个工作可以由于系统已关闭,因此无法在下午3:00运行,即使各自的调度时间已经消失,也可以在服务器恢复运行时运行.
或者,如果第一件事不可能,那么:
- 我需要一种方法来使用新作业更新调度程序,并且还需要更新提供这些作业的jar,而无需重新启动调度程序(类似于OSGi).
这些条件中的任何一个都满足我的要求,并且会结束我对替换的搜索,我查看了Quartz,Oddjob(这是一个使用这个调度程序生产的调度程序,但是每次添加新的作业/库时都需要重新启动,不满足我的需求)和OSGi使用应用服务器,但我正在寻找更好的建议,如果你也知道更好的选择,他们也非常感激.
我们的solr索引会根据计划刷新,也可以根据需要通过DataImportHandler完全导入进行任意刷新.我们曾多次因各种原因导致进口失败.
如何在使用DataImportHandler执行导入时收到错误发生的通知(最好是电子邮件)?
我将把一些截图抓取代码(C++)的linux移植到osx.当前的解决方案在xvfb中运行图形应用程序,然后使用xlib从显示中获取屏幕截图.(如果我们在没有xvfb的情况下运行,那也将支持).
所以我理解osx正在远离 X11,所以我的问题是除了xlib之外还要使用什么来实现呢?我找到了Quartz Display Services.现在使用是否有意义?这会与xvfb一起使用吗?
我使用石英、Spring 和 Hibernate 作为 JPA 提供程序。数据库是甲骨文。
我有一种方法可以将文件写入文件系统并使用详细信息更新数据库。可以通过两种方式调用此方法:
我已将石英设置为:
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" scope="singleton">
<property name="autoStartup" value="true"/>
<property name="waitForJobsToCompleteOnShutdown" value="true"/>
<property name="overwriteExistingJobs" value="true"/>
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">FileScheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.jobStore.misfireThreshold">6000</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">${driverDelegateClass}</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">5</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这种方法是使用 spring 管理的事务。
问题是当这个方法被石英调度器调用时,文件被创建但数据库没有更新(应该有两个表更新和一个表插入)。
我也启用了 hibernate show_SQL,但在调度程序的情况下,不会记录更新\插入语句。
尽管当 Web 服务请求调用此方法时,这可以正常工作。日志也显示更新\插入语句。
更新 1
总结我的问题,这就是我想要实现的目标:
最后,我希望所有表格都得到更新。 …
我在我的Web应用程序(Servlet Web应用程序)中使用了quartz,下面是quartz.property文件和quartz.job.xml的快照.
quartz.property
#===================================================
# Configure the Job Initialization Plugin
#===================================================
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
<?xml version='1.0' encoding='utf-8'?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
version="1.8">
<schedule>
<job>
<name>my-very-clever-job</name>
<group>MYJOB_GROUP</group>
<description>The job description</description>
<job-class>com.acme.scheduler.job.ReportJob</job-class>
</job>
<trigger>
<cron>
<name>my-trigger</name>
<group>MYTRIGGER_GROUP</group>
<job-name>my-very-clever-job</job-name>
<job-group>MYJOB_GROUP</job-group>
<!-- trigger every night at 4:30 am -->
<cron-expression>0 30 4 * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
Run Code Online (Sandbox Code Playgroud)
按顺序,每件事都很好.我需要允许用户按照他们想要的方式更改时间(cron表达式).我的问题是如何动态设置cron表达式.
有没有办法允许任何类型的字典/对象作为输入变量?
我有一个使用 lambda 创建 cron 表达式的模块,并且我正在尝试添加一个变量来接受字典以传递到资源调用中。
我只想允许任何长度的字典。其中键和值的任何类型。
最初,我尝试过:
variable vars {
type = object
}
Run Code Online (Sandbox Code Playgroud)
但这是不允许的。
现在我只是将类型设置为空,因此它会接受任何内容,但这似乎不是一个好的做法。
quartz.net ×2
.net ×1
c++ ×1
cgpath ×1
crontab ×1
hibernate ×1
ios ×1
java ×1
jpa ×1
macos ×1
nhibernate ×1
osgi ×1
pdf ×1
scheduler ×1
screenshot ×1
solr ×1
spring ×1
terraform ×1
uiimageview ×1
xvfb ×1