项目中用到job的主要是各种公告,比如活动开始公告这种,以此为例:

public class Domain {

    public Domain() {

        AnnounceManager.getIns().startAllAnnounceTimer();
}
public static void main(String[] args) {
new Domain();
}
}

#主要处理类AnnounceManager

public class AnnounceManager {
private static AnnounceManager ins = new AnnounceManager(); private AnnounceManager() {
} public static AnnounceManager getIns() {
return ins;
} /**
* 向客户端发送公告信息
*/
public void announce(AnnouncementInfo info) {
// 在这里获取到对应公告的实例对象,并进行不同的公告逻辑
System.out.println("AnnounceManager.announce(): " + "开始公告~");
} public void startAllAnnounceTimer() {
List<Z_announcement_info> list = new ArrayList<>();
try {
Scheduler scheduler = new StdSchedulerFactory().getScheduler(); if (!scheduler.isStarted()) {
scheduler.start();
} else {
scheduler.clear();
}
// ************ORCO************
Z_announcement_info a = new Z_announcement_info();
a.setAnnounceId(2);
a.setAnnounceName("活动开始");
a.setCronExpression("0 24 14 * * ?");// 14点24的时候触发,可以随意修改,来进行测试
a.setDefineId(2);
a.setDirection(0);
a.setHasExtraParam(1);
a.setSpeed(5);
a.setStatus(0);
// 定时器表
list.add(a);
// ************ORCO************ // 公告数据存于数据库,quartz.properties中没有配置使用插件
// ORCO中间的代码,目的只要是从数据库中取出公告配置数据,如cron表达式等
// 原本ORCO中间的代码为:list =
// DataManager.getIns.getZ_announcement_infoList();
// 为了清晰,如此修改 AnnouncementInfo info = null;
for (Z_announcement_info z_announcement_info : list) { // AnnouncementInfo与Z_announcement_info内容基本一致,可以用同一个类
info = new AnnouncementInfo(z_announcement_info); // 任务名,任务组,任务执行类
JobDetailImpl jobDetail = new JobDetailImpl();
jobDetail.setJobClass(AnnounceJob.class);
jobDetail.setKey(JobKey.jobKey(info.getAnnounceName())); Map<String, AnnouncementInfo> map = new HashMap<String, AnnouncementInfo>(); // jobDataMapKey可随意修改,在继承JOB的类中从map中通过此key获取map数据
map.put("jobDataMapKey", info);
jobDetail.setJobDataMap(new JobDataMap(map)); // cron 表达式
String cronExpression = info.getCronExpression().trim();
// 触发器
CronTriggerImpl trigger = new CronTriggerImpl();
// 触发器名
trigger.setKey(TriggerKey.triggerKey(info.getAnnounceName()));
try {
// 触发器时间设定
trigger.setCronExpression(cronExpression);
scheduler.scheduleJob(jobDetail, trigger);
} catch (ParseException e) {
}
}
} catch (SchedulerException e) {
} catch (Exception e1) {
}
}
}

#接下来,如果到触发时间,就会走实现JOB接口的类,进行你的逻辑

public class AnnounceJob implements Job {

    @Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
JobDataMap dm = arg0.getMergedJobDataMap();
AnnouncementInfo info = (AnnouncementInfo) dm.get("jobDataMapKey");
try {
AnnounceManager.getIns().announce(info);
} catch (Exception e) {
e.printStackTrace();
}
} }

#与数据库表相同结构的类

/**
* 公告详细信息
*/
public class Z_announcement_info
{
// 公告id
private int announceId; // 公告名
private String announceName; // 公告类型ID
private int defineId; // 公告的时间周期,使用cron表达式
private String cronExpression; // 公告的走向(0:从右向左,1:从左向右)
private int direction; // 公告的播放速度
private int speed; // 是否拥有额外参数(1 有,0 没有)
private int hasExtraParam; // 是否有效 0:失效,1:有效
private int status; public int getAnnounceId()
{
return announceId;
} public void setAnnounceId(int announceId)
{
this.announceId = announceId;
} public String getAnnounceName()
{
return announceName;
} public void setAnnounceName(String announceName)
{
this.announceName = announceName;
} public int getDefineId()
{
return defineId;
} public void setDefineId(int defineId)
{
this.defineId = defineId;
} public String getCronExpression()
{
return cronExpression;
} public void setCronExpression(String cronExpression)
{
this.cronExpression = cronExpression;
} public int getDirection()
{
return direction;
} public void setDirection(int direction)
{
this.direction = direction;
} public int getSpeed()
{
return speed;
} public void setSpeed(int speed)
{
this.speed = speed;
} public int getHasExtraParam()
{
return hasExtraParam;
} public void setHasExtraParam(int hasExtraParam)
{
this.hasExtraParam = hasExtraParam;
} public int getStatus()
{
return status;
} public void setStatus(int status)
{
this.status = status;
} @Override
public String toString()
{
return "Z_announcement_info [announceId=" + announceId + ", announceName=" + announceName + ", defineId="
+ defineId + ", cronExpression=" + cronExpression + ", direction=" + direction + ", speed=" + speed
+ ", hasExtraParam=" + hasExtraParam + ", status=" + status + "]";
}
}

#最后就是quartz.properties的配置了,这里没有使用插件,此properties能应用大多数情况

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified. org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

注:需上传jar包 quartz-2.2.1.jar、quartz-jobs-2.2.1.jar、log4j-1.2.12.jar、slf4j-api-1.6.4.jar、slf4j-log4j12-1.6.4.jar

后三个jar包不导入,会报错。

至此,一个简单的示例已经完成,可以成功运行。

最新文章

  1. C# 时间计算 今天、昨天、前天、明天 一个月的开始日期与结束日期
  2. C语言中的字符串
  3. 【BZOJ 4269】再见Xor
  4. 连接Oracle的帮助类
  5. Android 学习笔记之Volley(七)实现Json数据加载和解析...
  6. web设计经验&lt;九&gt;教你测试手机网页的5大方法
  7. UI学习笔记---第三天
  8. 复选框输入Android Studio 如果修改LogCat的颜色,默认全是黑色看着挺不舒服的
  9. ueditor富文本编辑的使用方法
  10. Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
  11. 嵌入在网站上Flash播放机(2)
  12. Google大数据三篇著名论文----中文版
  13. Javascript获取不重复的随机数值
  14. 2017年 JavaScript 框架回顾 -- React生态系统
  15. python简说(八)random
  16. System.ComponentModel.DataAnnotations.Schema 冲突
  17. GSM中时隙、信道、突发序列、帧的解释
  18. Codeforces Round #102 (Div. 1) A. Help Farmer 暴力分解
  19. Manacher练习
  20. 在webView 中使用JS 调用 Android / IOS的函数 Function

热门文章

  1. 2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程
  2. C#软件设计——小话设计模式原则之:开闭原则OCP
  3. Android LitePal 神一般的数据库框架 超级好用
  4. 【cocos2d-x + Lua(2) C++和lua数据通讯之间的互调】
  5. Python项目之我的第一个爬虫----爬取豆瓣图书网,统计图书数量
  6. Python操作Mysql之基本操作
  7. Html特殊字符表
  8. postgresql:pgadmin函数调试工具安装过程
  9. 群里分享的react的收藏一下!今日周末,改了个表单验证然后无所事事了!
  10. URL详解