quartz定时器
一、quartz定时器是什么,
quartz是一个功能丰富,开源的任务调度的定时器的框架;可以兼容从最小的标准的java程序到最最大的电子商务系统的框架。quartz可以创建几十,几百,甚至成千上万的工作任务事件表;这些任务可以是一个标准的java组件,可以执行几乎你所有的计划去做的事情。
二、quartz定时器应用场景
quartz是一个定时任务调度的的框架,比如你在未来某天要礼物给女朋友,可以使用这个框架达到你的想法。
总的来说;在规律的时间点上想要去干某些事,quartz框架就可以简单帮你处理这些事情。
三、quartz定时器优缺点
四、quartz定时器原理
五、quartz定时器使用的例子
(一)、官方的使用例子
1、使用继承org.quartz.Job类创建一个你自己工作任务的Job类,继承的execute()方法是可以实现你实际想要的工作内容。
public class MyJob implements org.quartz.Job {
public MyJob() {
}
public void execute(JobExecutionContext context) throws JobExecutionException {
System.err.println("Hello World! MyJob is executing.");
}
}
2、逐步实现你的定时配置。
// define the job and tie it to our MyJob class
//定义一个你的任务操作实体。
JobDetail job = newJob(MyJob.class)
.withIdentity("job1", "group1")
.build();
// Trigger the job to run now, and then repeat every 40 seconds
//定义好你的时间点的触发器
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
//把你的工作的内容实体和触发器添加到你的quartz的任务工作表中。
scheduler.scheduleJob(job, trigger);
(二)、quartz结合Spring框架的使用
1、创建你是实际工作任务的实体,要在applicationContext.xml文件中创建,要不然是null了
<bean id="updateUumsSmsSendTask"
class="com.newsoft.sysmanager.uums.thread.UpdateUumsSmsSendTask"></bean>
2.使用1步骤的创建好的updateUumsSmsSendTask的实体去创建job类实体,
<bean id="SmsSendClock" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>com.newsoft.sysmanager.uums.thread.UpdateUumsSmsSendQuartz</value>
</property>
<property name="durability" value="true" />
<property name="jobDataAsMap">
<map>
<entry key="updateUumsSmsSendTask" value-ref="updateUumsSmsSendTask" />
</map>
</property>
<!---->
</bean>
3.使用2步骤创建的实体SmsSendClock去创建一个触发器SmsSendTrigger,
<bean id="SmsSendTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="SmsSendClock"></ref>
</property>
<property name="cronExpression">
<value>0 * * * * ?</value> <--秒,分,时,月,星期,年 -->
</property>
</bean>
4.使用3步骤创建好的SmsSendTrigger触发器创建运行Scheduler类的实体
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="SmsSendTrigger"></ref>
</list>
</property>
</bean>
5.com.newsoft.sysmanager.uums.thread.UpdateUumsSysUserTask类
/*
* 更新统一系统用户信息服务
*
* @author liangchuhong
*
*/
public class UpdateUumsSysUserTask {
final static Logger logger = Logger.getLogger(UpdateUumsSysUserTask.class);
private static boolean running = true;
@Autowired
private SysUserDAO sysUserDAO;
@Autowired
private UpdateLogDao updateLogDao;
public void run() {
if (!running) {
return;
}
try {
running = false;
//全量更新
sysuseradd();
//增量更新
/*sysuseronlyadd();*/
running = true;
} catch (Exception e) {
logger.error("Error when UpdateUumsSysUserTask ", e);
e.printStackTrace();
}
}
@SuppressWarnings("rawtypes")
private void sysuseradd() {
//你可以实现的内容
}
}
6、com.newsoft.sysmanager.uums.thread.UpdateUumsSmsSendQuartz类
public class UpdateUumsSmsSendQuartz extends QuartzJobBean {
final static Logger log = Logger.getLogger(UpdateUumsSmsSendQuartz.class);
private UpdateUumsSmsSendTask updateUumsSmsSendTask ;//= new UpdateUumsSmsSendTask();
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
//重写方法 定时实现的内容
log.debug("发送消息");
updateUumsSmsSendTask.run();
}
public UpdateUumsSmsSendTask getUpdateUumsSmsSendTask() {
return updateUumsSmsSendTask;
}
@SuppressWarnings("static-access")
public void setUpdateUumsSmsSendTask(UpdateUumsSmsSendTask updateUumsSmsSendTask) {
this.updateUumsSmsSendTask = updateUumsSmsSendTask;
}
}