- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以前从未使用过 quartz 调度程序,而且我在创建 Quartz 作业时遇到了问题。我通过 cronExpression
配置的触发器没有触发,我没有看到我遗漏了什么。
在此先感谢您的帮助或建议!
我正在使用:
quartz 版本 1.6.3
spring 版本 3.1.1
调度器:
<beans default-autowire="byName"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- Quartz Scheduler -->
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource" ref="itc5DataSource" />
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">${cepis.portal.scheduler.name}</prop>
<prop key="org.quartz.scheduler.instanceId">${cepis.portal.scheduler.instanceId}</prop>
<prop key="org.quartz.threadPool.class">${cepis.portal.scheduler.threadPool.class}</prop>
<prop key="org.quartz.threadPool.threadCount">${cepis.portal.scheduler.threadPool.threadCount}
</prop>
<prop key="org.quartz.jobStore.class">${cepis.portal.scheduler.jobStore.class}</prop>
<prop key="org.quartz.jobStore.isClustered">${cepis.portal.scheduler.jobStore.isClustered}</prop>
<prop key="org.quartz.jobStore.useProperties">${cepis.portal.scheduler.jobStore.useProperties}
</prop>
<prop key="org.quartz.jobStore.tablePrefix">${cepis.portal.scheduler.jobStore.tablePrefix}</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">${cepis.portal.scheduler.jobStore.driverDelegateClass}
</prop>
<prop key="org.quartz.jobStore.selectWithLockSQL">${cepis.portal.scheduler.jobStore.selectWithLockSQL}
</prop>
</props>
</property>
<property name="jobDetails">
<list>
<ref bean="updateNoShowAppointmentJob" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="updateNoShowTrigger" />
</list>
</property>
</bean>
<!-- ************************************************************************************************* -->
<bean id="updateNoShowAppointmentJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="name" value="CEPIS-UpdateNoShows" />
<property name="group" value="Appointments" />
<property name="jobClass" value="edu.uky.cepis.util.cron.job.UpdateNoShowAppointmentJob" />
</bean>
<!-- ************************************************************************************************* -->
<bean id="updateNoShowTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="name" value="UpdateNoShow" />
<property name="group" value="Appointments" />
<property name="jobDetail" ref="updateNoShowAppointmentJob" />
<!-- Do this every 60 seconds.-->
<property name="cronExpression" value="0 * * * * ?" />
</bean>
</beans>
工作:
/**
*
*/
package edu.uky.cepis.util.cron.job;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
import edu.uky.cepis.service.AdvisingSessionService;
import edu.uky.cepis.domain.AdvisingSession;
/**
* @author cawalk4
*
* Purpose: Update all appointments with a date before the current date time
* Setting the appointmentStatus to "No Show"
*
*/
public class UpdateNoShowAppointmentJob extends QuartzJobBean {
private static Logger log = Logger.getLogger(
UpdateNoShowAppointmentJob.class);
private AdvisingSessionService advisingSessionService;
private static String NO_SHOW = "No Show";
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
log.debug("Running UpdateNoShowAppointmentJob at " + new Date());
ApplicationContext appContext = null;
try {
appContext = (ApplicationContext) context.getScheduler()
.getContext().get("applicationContext");
} catch (SchedulerException se) {
System.err.println(se);
}
try {
advisingSessionService = (AdvisingSessionService) appContext
.getBean("advisingSessionService", AdvisingSessionService.class);
} catch (Exception e) {
System.err.println(e);
}
if (advisingSessionService != null) {
List<AdvisingSession> advisingSessionList =
new ArrayList<AdvisingSession>(0);
advisingSessionList = advisingSessionService.getNewNoShowAdvisingSessions();
if (advisingSessionList == null) {
log.debug("advisingSessionSlotlist is null.");
return;
} else if (advisingSessionList.isEmpty()) {
log.debug("There are no new No Show advising appointments.");
return;
}
log.debug("Total no show e-mails are: " + advisingSessionList.size());
// Update the appointments
for(AdvisingSession advisingSession : advisingSessionList){
advisingSessionService.updateAdvisingSession(
advisingSession,
advisingSession.getSessionType(),
NO_SHOW,
advisingSession.getPreSessionText(),
advisingSession.getSessionText(),
advisingSession.getStudentNotes(),
advisingSession.getAdvisorNotes(),
advisingSession.getAdvisingSessionSlot(),
advisingSession.getNoShowEmailSentBoolean());
}
} else {
log.debug("advisingSessionService is null.");
}
}
public void setadvisingSessionService(AdvisingSessionService advisingSessionService) {
this.advisingSessionService = advisingSessionService;
}
public AdvisingSessionService getadvisingSessionService() {
return advisingSessionService;
}
}
最佳答案
如果您删除设置 scheduler
bean 的 jobDetails
属性的 XML 部分,它应该会按预期工作。
如果您查看 Spring 的 SchedulerAccessor
类(SchedulerFactoryBean
的父类(super class))上的 setTriggers
的 javadoc,您可以看到:
If the Trigger determines the corresponding JobDetail itself, the job will be automatically registered with the Scheduler. Else, the respective JobDetail needs to be registered via the "jobDetails" property of this FactoryBean.
他们没有提到的是,如果您已经注册了 JobDetail
,它将阻止 Trigger
安排其引用的作业。 SchedulerAccessor
中的 addTriggerToScheduler
方法的源代码有这段代码:
JobDetail jobDetail = findJobDetail(trigger);
if (jobDetail != null) {
// Automatically register the JobDetail too.
if (!this.jobDetails.contains(jobDetail) && addJobToScheduler(jobDetail)) {
this.jobDetails.add(jobDetail);
}
}
然后您可以看到,如果 jobDetails
已经包含您的作业,则 if
条件将很快失败,并且 addJobToScheduler
方法将永远不会被调用。
关于java - 如何使用调度程序触发 Spring Quartz 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203004/
概述 触发器是 MySQL 的数据库对象之一,不需要程序调用或手工启动,而是由事件来触发、激活,从而实现执行,包括 INSERT 语句、UPDATE 语句和 DELETE 语句 创建触发器 1. 创建
当我为单元格获得的值是某种类型时,我试图设置一个触发器来显示文本块。 我已经成功地设法在相同的情况下显示图像,但在这种情况下我不需要图像,而是一些文本。 已注释掉行以进行测试。尝试使其工作。注释掉的代
我需要在 phpmyadmin 中为 2 个表创建一个触发器。 所以有表 stores 和 tbl_storefinder_stores。 我想从 stores 表中插入 4 个东西(名称、地址、经度
阅读目录 1、触发器 2、触发器类型 3、触发器语法 4、插入数据触发器案例 5、修改数据触发器案例
SQLite 触发器(Trigger) SQLite 的触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。以下是关于SQLite的触发器的要点:SQLite **触发器(Trig
请帮我写一个向表中添加新行的触发器。 我的数据库中有 3 个表: 地区(id,名字); id - 主要; 技术人员(身份证、姓名); id - 主要; 可用性(id、区域、技术、计数); id - p
我正在编写一个触发器来审核表中的更新和删除。我正在使用 SQL Server 2008 我的问题是, 有没有办法在不经过删除和插入表的选择阶段的情况下找出对记录采取的操作? 另一个问题是,如果记录被删
我的表: TableA (id number, state number) TableB (id number, tableAId number, state number) TableC (id n
我很少写触发器。我可以帮助设置这件事。 CREATE TRIGGER audit_tableName ON dbo.tableNameAudit AFTER CREATE, UPDATE, DELET
我之前从未在 Oracle 中创建过触发器,所以我正在寻找一些方向。 如果 ID 不在插入语句中,我想创建一个将 ID 增加 1 的触发器。 ID 应该从 10000 开始,当插入一条记录时,下一个
考虑以下两个(假设的)表 温度 * day * time * lake_name * station * temperature_f 温度_总结 * day * lake_name * station
如何在 SQL 触发器中获取更新记录的值 - 如下所示: CREATE TRIGGER TR_UpdateNew ON Users AFTER UPDATE AS BEGIN S
我是 Cassandra 新手,使用 Cassandra 3.10 并有类似的表格 create table db1.table1 (id text, trip_id text, event_time
在 MSSQL 中执行 TRUNCATE(而不是删除)时如何触发触发器 最佳答案 来自msdn : TRUNCATE TABLE cannot activate a trigger because t
我正在尝试在 sql developer 中创建一个简单的触发器,以在工资发生变化时显示工资的变化 CREATE OR REPLACE TRIGGER salary_changes BEFORE DE
我有三个表: Table1: Customers (CustomerId, Name, CustomerAddress) Table2: AccountManagers(ManagerId, Name
在 Sql Server 2005 触发器中有没有办法在执行期间获取触发器附加到的表的名称和架构? 最佳答案 SELECT OBJECT_NAME(parent_id) AS [Table],
使用 MySQL 5.5,以下触发器因错误而被拒绝: create trigger nodups before insert on `category-category` for each row b
我使用 fancybox 打开一个带有表单的弹出窗口。目前,当鼠标离开主页时,弹出窗口就会出现。为了完成这项工作,我有一个隐藏的链接标签,我用trigger()函数模拟它,单击该函数,以便该链接的hr
我的触发器触发 INSERT, UPDATE and DELETE .我需要根据触发触发器的操作从适当的内存表( inserted, deleted )插入。由于只有 inserted位于 INSER
我是一名优秀的程序员,十分优秀!