石英表如何走时?它是在后台运行的连续计时器还是以某种方式使用操作系统调度程序还是其他东西?
哪个类实际上拥有此功能?
谢谢。
我有一个 CronExpression 设置为每 30 分钟执行一次作业。但如果之前的工作未完成,我需要跳过特定的工作。
例如。我有 100 名员工的姓名需要在数据库中更新,我将其称为“Job1”,从上午 10 点开始。现在的情况就像“Job1”正在处理中,当我有另一项工作“Job2”时,我需要更新另外 50 名员工的姓名。我的问题是这样的,我需要跳过“Job2”和其他作业,直到我当前运行的作业完成。
<bean name="employeeNameUpdateJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="name" value="Employee Update Job"/>
<property name="group" value="Employee Update Group Job"/>
<property name="jobClass"
value="com.emp.scheduler.EmployeeUpdateScheduler" />
<property name="volatility" value="false" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="name" value="Employee Update Trigger"/>
<property name="group" value="Employee Update Group Trigger"/>
<property name="volatility" value="false" />
<property name="jobDetail" ref="employeeNameUpdateJob"/>
<property name="cronExpression" value="0 0/30 * * * ?"/>
</bean>
Run Code Online (Sandbox Code Playgroud) 我有一个自定义的 Windows 服务,我想使用 Quartz .NET 来安排服务运行的时间。现在,我了解了quartz.NET 的基础知识,但我不确定如何将它连接到Windows 服务。所以,假设我有Service.exe,我想每小时运行一次。我将如何通过 Quartz 实现这个功能?我知道这是一个模糊的问题,但真的没有其他方法可以问它。
提前致谢。
我正在尝试按照“ Quartz 调度框架”一书“在 Web 应用程序中初始化 Quartz ”示例中提到的步骤进行操作。这是该程序的链接https://gist.github.com/5777d9f27c700e716a5a。但是这个例子是在 Struts1 框架上的。
我们的是一个带有 Hibernate 3.5 ORM 的 struts2 框架。我应该如何在 Struts2 上配置确切的步骤。任何帮助,将不胜感激。
但是,如果我在 contextInitialized() 方法中编写代码,则会收到异常“java.lang.RuntimeException: java.io.FileNotFoundException: src/hibernate.cfg.xml (No such file or directory)”
Xml config = new Xml("src/hibernate.cfg.xml", "hibernate-configuration");
Properties prop = new Properties();
prop.setProperty("org.quartz.dataSource.tasksDataStore.driver", config.child("session-
factory").children("property").get(1).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.URL", config.child("session-
factory").children("property").get(2).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.user", config.child("session-
factory").children("property").get(3).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.password", config.child("session-
factory").children("property").get(4).content());
prop.setProperty("org.quartz.dataSource.tasksDataStore.maxConnections", "20");
SchedulerFactory sf = new StdSchedulerFactory(prop);
Scheduler sched = sf.getScheduler();
Run Code Online (Sandbox Code Playgroud) 我们有一个使用 Spring Framework 在 Tomcat 中运行的 Web 应用程序。我们需要为循环操作添加一些预定的作业。我们为此遇到了 Quartz 调度器,并遵循了使用 Quartz 和 Spring 配置作业的教程,并按预期安排和运行了作业。
所以我们有一些任务是在应用程序启动时安排的。现在我们希望用户手动运行作业并更改作业的触发器,但我们需要将这些更改持久化到数据库中。因此,当应用程序启动时,它会读取持久化的任务,如果它们不存在,则从 spring 描述符文件中加载默认任务。
为简单起见,让我们假设我们正在使用示例中的 beans.xml 文件:
<bean id="processToExecute" class="com.mycompany.ProcessToExecute" />
<bean name="processToExecuteJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.mycompany.ProcessToExecuteJob" />
<property name="jobDataAsMap">
<map>
<entry key="processToExecute" value-ref="processToExecute" />
</map>
</property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="processToExecuteJob" />
<property name="cronExpression" value="0/5 * * * * ?" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="processToExecuteJob" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property> …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 Quartz cron 表达式来安排一个作业从今天起每两年在特定的一天运行。我已经测试了很多,但我认为以下之一应该可以完成工作:
53 18 23 12 ? 2013/2 => starting on year 2013 and on every two years later on
53 18 23 12 ? */2
Run Code Online (Sandbox Code Playgroud)
但是他们都没有通过 Quartz cron 表达式验证测试。什么是正确的 cron 表达式?
一切似乎与Quartz完美配合,但在启动应用程序时我得到了下面的堆栈跟踪
org.quartz.SchedulerException: Jobs added with no trigger must be durable.
at org.quartz.core.QuartzScheduler.addJob(QuartzScheduler.java:916)
at org.quartz.impl.StdScheduler.addJob(StdScheduler.java:269)
at org.quartz.xml.XMLSchedulingDataProcessor.scheduleJobs(XMLSchedulingDataProcessor.java:1069)
at org.quartz.xml.XMLSchedulingDataProcessor.processFileAndScheduleJobs(XMLSchedulingDataProcessor.java:888)
at org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin.processFile(XMLSchedulingDataProcessorPlugin.java:330)
at org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin.start(XMLSchedulingDataProcessorPlugin.java:257)
at org.quartz.plugins.SchedulerPluginWithUserTransactionSupport.start(SchedulerPluginWithUserTransactionSupport.java:144)
at org.quartz.core.QuartzScheduler.startPlugins(QuartzScheduler.java:2343)
at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:527)
at org.quartz.impl.StdScheduler.start(StdScheduler.java:143)
at org.quartz.ee.servlet.QuartzInitializerServlet.init(QuartzInitializerServlet.java:211)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1266)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1185)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5015)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Run Code Online (Sandbox Code Playgroud)
quartz-config.xml中的作业调度似乎很好,所有按计划安排的作业也是如此
知道是什么导致了这个吗?
这是配置文件,对我来说似乎是正确的
<schedule>
<job>
<name>ProcessLeadsJob</name>
<group>PROCESS_LEAD_JOB_GROUP</group>
<description>This job process the leads every 24 …Run Code Online (Sandbox Code Playgroud) 我试图在我的 spring mvc 项目中通过作业存储使用作业持久性,但我的数据库结构似乎有问题。
我的数据库是 MySQL (v 5.6.15),我使用 Quartz jar (v 1.8.6) 中的脚本创建了表。
执行一些测试我发现作业和触发器保留在数据库中并且(我希望)正确加载,但它们没有被执行。触发状态始终为“WAITING”。
我尝试在 SqlServer 实例上创建表结构(总是使用提供的脚本),现在它可以工作了!!!那么,MySql 有什么问题呢?
我注意到的唯一区别是 MySQL 中的表名是小写的,而不是 SqlServer 中的全部大写,这会不会有问题?
我的配置如下:
通过 spring 的调度程序配置
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="quartzProperties">
<map>
<entry key="org.quartz.scheduler.instanceName" value="gep_scheduler" />
<!-- ThreadPool -->
<entry key="org.quartz.threadPool.class" value="org.quartz.simpl.SimpleThreadPool" />
<entry key="org.quartz.threadPool.threadCount" value="3" />
<entry
key="org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread"
value="true" />
<!-- JobStore -->
<entry key="org.quartz.jobStore.class" value="org.quartz.impl.jdbcjobstore.JobStoreTX" />
<entry key="org.quartz.jobStore.driverDelegateClass" value="org.quartz.impl.jdbcjobstore.StdJDBCDelegate" />
<entry key="org.quartz.jobStore.tablePrefix" value="qrtz_" />
<entry key="org.quartz.jobStore.dataSource" value="qzDS" />
<entry key="org.quartz.jobStore.isClustered" value="false" />
<entry key="org.quartz.jobStore.misfireThreshold" value="60000" />
<!-- DataSource …Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,其中在包含要运行的类文件的应用程序之前部署了quartz-service.xml(使用quartz 1.8.6 和JBOSS 5.1.x)。有没有办法延迟石英的启动?
我的quartz-service.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.quartz.ee.jmx.jboss.QuartzService" name="user:service=QuartzService,name=QuartzService">
<attribute name="JndiName">Quartz Scheduler</attribute>
<attribute name="Properties">
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.xaTransacted = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 4
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = D:/JBoss-5.1.0/quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
</attribute>
</mbean>
</server>
Run Code Online (Sandbox Code Playgroud) 我目前正在Quartz.net上进行某种简化的包装,以便能够管理所有在后台作业中注册和运行的程序,显示有关作业执行进度,百分比的其他信息,返回有关当前作业状态的某种消息等。例如,如果我当前的工作是将数据发布到社交媒体上,我想查看当前数据发布到哪个社交媒体上,或者如果工作正在发送电子邮件,我想实时查看当前生成了多少电子邮件,如何已经发送了很多,还剩下多少,等等。为此,我将数据保存到IJobExecutionContext (context.JobDetail.JobDataMap)作业Execute方法中。然后使用我的经理获取当前执行的所有作业:
public List<IJobExecutionContext> RunningJobs
{
get { return Scheduler.GetCurrentlyExecutingJobs().ToList(); }
}
Run Code Online (Sandbox Code Playgroud)
和显示从细节提取JobDataMap每个的IJobExecutionContext。这样还行。但是问题是,例如,如果作业执行失败,我想在中记录(保存)尽可能多的数据,包括异常对象本身JobDataMap。但是,问题是,当作业执行完成时,将放置上下文对象。我丢失了所有这些数据。因此,当我尝试获取当前计划作业的所有JobDetail时:
public List<IJobDetail> AllJobs
{
get
{
var result = new List<IJobDetail>();
var jobGroups = Scheduler.GetJobGroupNames();
foreach(string group in jobGroups)
{
var groupMatcher = GroupMatcher<JobKey>.GroupContains(group);
var jobKeys = Scheduler.GetJobKeys(groupMatcher);
foreach(var jobKey in jobKeys)
{
var detail = Scheduler.GetJobDetail(jobKey);
result.Add(detail);
}
}
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
我看不到作业执行期间保存到的数据detail.JobDataMap。但是我仍然可以看到在作业实际执行之前初始化/计划作业时保存的数据。作为一种选择,我可以在执行期间(实际上是在执行中)捕获该异常的日志,但是我想将该作业标记为失败并在“作业”详细信息视图中显示失败的原因。它使用List<IJobDetail> AllJobs(在上面实现)从我的经理那里获取数据(就像我的工作的某种存储库)。
因此,我是否必须使用某种附加的作业详细信息存储来在执行期间保存此数据,然后获取所有计划的作业并按作业ID或其他内容映射此数据。这不是我想要的解决方案。还是实际上有一种在执行时将数据保存到JobDataMap并在执行后访问此数据的方法?
quartz-scheduler ×10
java ×5
spring ×3
c# ×2
quartz.net ×2
.net ×1
cron ×1
jobs ×1
mysql ×1
struts2 ×1