java定时器_iphone如何定时发送短信

java定时器_iphone如何定时发送短信定时任务(如:定时发送短信邮箱等)前面整过一个任务调度,它是固定在每天几点等执行,对于要手动加入的时间的定时发送短信不适用。学习quartz首先了解三个概念:调度器:负责调度作业和触发器;触发器:设置作业执行的时间、参数、条件等;(简单触发器和Cron触发器)作业:定时任务内容,被执行的程序;下载必要的jar包,将quartz-x.x.x.jar和core和/或optional文件夹中的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

定时任务(如:定时发送短信邮箱等)

前面整过一个任务调度,它是固定在每天几点等执行,对于要手动加入的时间的定时发送短信不适用。

学习quartz首先了解三个概念:

调度器:负责调度作业和触发器;

触发器:设置作业执行的时间、参数、条件等;(简单触发器和Cron触发器)

作业:定时任务内容,被执行的程序;

下载必要的jar包,将quartz-x.x.x.jar 和core 和/或 optional 文件夹中的 jar 文件放在项目的文件夹或项目的类路径中 Quartz的几个核心的接口和类为:

Job接口:自己写的“定时程序”实现此接口的void execute(JobExecutionContext

arg0)方法,Job还有一类为有状态的StatefulJob接口,假如我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要

实现此接口。

Trigger抽象类:调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。

Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,几点结束,隔

多长时间执行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的定时描述,例如每个月的最后一个周五,每周的周四等。

JobDetail类:具体某个定时程序的具体描述,包括Name,Group,JobDataMap等。

JobExecutionContext类:定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。

JobDataMap类:用于描述一个作业的参数,参数可以为任何基本类型例如String,float等,也可为某个对象的引用.

JobListener,TriggerListener接口:用于监听触发器状态和作业扫行状态,在特写状态执行相应操纵。

JobStore类:在哪里执行定进程序,可选的有在内存中,在数据库中。

开始:边看例题边学习,首先从简单触发器开始…… 1、作业通过实现org.quartz.job接口,可以使 Java

类变成可执行的。这个类用一条非常简单的输出语句覆盖了execute(JobExecutionContext context)方法。 import

java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class SimpleQuartzJob implements Job {

public SimpleQuartzJob() {

}

public void execute(JobExecutionContext context) throws JobExecutionException {

System.out.println(“In SimpleQuartzJob – executing its JOB at “

+ new Date() + ” by ” + context.getTrigger().getName());

}

} 2、触发器和调度器

public void task() throws SchedulerException

{

//通过SchedulerFactory来获取一个调度器

SchedulerFactory schedulerFactory = new StdSchedulerFactory();

Scheduler scheduler = schedulerFactory.getScheduler();

//引进作业程序

JobDetail jobDetail =

new JobDetail(“jobDetail-s1”, “jobDetailGroup-s1”, SimpleQuartzJob.class);

//new一个触发器

SimpleTrigger ***Trigger =

new SimpleTrigger(“***Trigger”, “triggerGroup-s1”);

//设置作业启动时间

long ctime = System.currentTimeMillis();

***Trigger.setStartTime(new Date(ctime));

//设置作业执行间隔

***Trigger.setRepeatInterval();

//设置作业执行次数

***Trigger.setRepeatCount(10);

//设置作业执行优先级默以为5

//***Trigger.setPriority(10);

//作业和触发器设置到调度器中

scheduler.scheduleJob(jobDetail, ***Trigger);

//启动调度器

scheduler.start();

}

一个简单的quartz任务就完成了。

以下是我根据上边的介绍写的定时发送消息的代码:

PushJob.java

package cn.net.inch.mb.task;

import java.text.SimpleDateFormat;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import cn.net.inch.mb.domain.Message;

import cn.net.inch.mb.service.IMessageService;

public class PushJob implements Job {

// private static IMessageService messageService = null;

@Override

public void execute(JobExecutionContext context)

throws JobExecutionException {

System.out

.println(“———————–定时发送———————————————-“);

Object object = context.getJobDetail().getJobDataMap().get(“message”);

Object msgService = context.getJobDetail().getJobDataMap().get(

“msgService”);

Message msgMessage = (Message) object;

IMessageService messageService = (IMessageService) msgService;

String title = msgMessage.getTitle();

System.out.println(“定时消息启动,消息标题为:” + title + “消息ID”

+ msgMessage.getId());

String content = msgMessage.getContent();

SimpleDateFormat tempDate = new SimpleDateFormat(“yyyy-MM-dd” + ” “

+ “HH:mm:ss”);

String pushTime = tempDate.format(new java.util.Date());

System.out.println(” ad msgMessage:” + (msgMessage == null));

try {

System.out.println(“进入推送”);

messageService.pushMsg(title, content, pushTime);

msgMessage.setStatus(“1”);

messageService.saveOrUpdateMessage(msgMessage);

} catch (Exception e) {

msgMessage.setStatus(“3”);

messageService.saveOrUpdateMessage(msgMessage);

e.printStackTrace();

}

System.out

.println(“———————–定时发送结束———————————————-“);

}

}

2.SimpleScheduler.java

package cn.net.inch.common.push;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.quartz.SimpleTrigger;

import org.quartz.impl.StdSchedulerFactory;

import cn.net.inch.mb.service.IMessageService;

import cn.net.inch.mb.task.PushJob;

public class SimpleScheduler {

private Scheduler scheduler = null;

private SimpleScheduler() throws SchedulerException {

scheduler = createScheduler();

}

private static SimpleScheduler instance;

public static synchronized SimpleScheduler getSimpleScheduler()

throws SchedulerException {

if (instance == null) {

instance = new SimpleScheduler();

}

return instance;

}

static Log logger = LogFactory.getLog(SimpleScheduler.class);

public static void main(String[] args) throws SchedulerException,

ParseException {

SimpleScheduler simple = new SimpleScheduler();

try {

// Create a Scheduler and schedule the Job

Scheduler scheduler = simple.createScheduler();

String ddd = “2012-01-13 15:56:30”;

Date d = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).parse(ddd);

// simple.scheduleJob(d, PushJob.class);

scheduler.start();

logger.info(“Scheduler started at ” + new Date());

} catch (SchedulerException ex) {

logger.error(ex);

}

}

public Scheduler createScheduler() throws SchedulerException {// 创建调度器

return StdSchedulerFactory.getDefaultScheduler();

}

public void scheduleJob(Date date, Object object, Long id,

IMessageService messageService) throws SchedulerException,

ParseException {

String dateStr = new SimpleDateFormat().format(date);

dateStr = id + dateStr;

System.out.println(“调度类名称为:” + dateStr);

JobDetail jobDetail = new JobDetail(dateStr, Scheduler.DEFAULT_GROUP,

PushJob.class);

// jobDetail.getJobDataMap().put(“SCAN_DIR”, “D:\\Tomcat\\conf”);

jobDetail.getJobDataMap().put(“message”, object);

jobDetail.getJobDataMap().put(“msgService”, messageService);

SimpleTrigger trigger = new SimpleTrigger(dateStr, “triggerGroup-s1”);

// TriggerUtils.makeSecondlyTrigger(3);// 每10秒触发一次

// trigger.setName(“scanTrigger”);

/*

* String ddd = “2012-01-05 19:22:00”; Date d = new

* SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).parse(ddd);

* trigger.setStartTime(d);// 设置第一次触发时间

*/

/*

* String ddd = “2012-01-06 19:00:00”; Date d = new

* SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).parse(ddd);

*/

trigger.setStartTime(date);

scheduler.scheduleJob(jobDetail, trigger);

System.out.println(“创建scheduler”);

// removeJob(“ScanDirectory”, Scheduler.DEFAULT_GROUP);

}

/*

* public boolean removeJob(String jobName, String group) throws

* SchedulerException { scheduler.pauseJob(jobName, group); return

* scheduler.deleteJob(jobName, group); }

*/

}

Action触发:

jobName = new SimpleDateFormat().format(messageList.get(i)

.getSendTime());

jobName = messageList.get(i).getId() + jobName;

Scheduler sched = gSchedulerFactory.getScheduler();

sched.deleteJob(jobName, Scheduler.DEFAULT_GROUP);

Scheduler scheduler = simple.createScheduler();

simple.scheduleJob(messageList.get(i).getSendTime(),

messageList.get(i), messageList.get(i).getId(),

messageService);

scheduler.start();

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182287.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月13日 下午9:46
下一篇 2022年10月13日 下午9:46


相关推荐

  • jsp:include引入jsp文件的时候(如果被包含的文件存在js文件),不要用相对路径

    jsp:include引入jsp文件的时候(如果被包含的文件存在js文件),不要用相对路径先回忆一下二者的区别(对于此篇文章而言,二者在用法上没有区别) jsp:include是先编译一下included.jsp文件,然后再包含 先编译,后包含@ include是先把文件包含就来,然后统一编译 先包含,后编译  今天下午想把jQuery集成到项目中,发现怎么样都会出问题。原因就是路径问题。在集成时,我的思路是…

    2022年6月13日
    31
  • 读书笔记-《王永庆全传》

    读书笔记-《王永庆全传》nbsp nbsp nbsp 譬如说 星期日休息一下 做点自己喜欢做的事情 消遣消遣本来是很舒服的 一般人也都希望有个休闲的时间 如果你这个礼拜里面 都是很用心 很认真的工作 礼拜日休息一下 的的确确舒服的很 反过来讲 这整个礼拜里面 你本来就无所事事 礼拜天再休息 恐怕那滋味就不会一样 不但不舒服 反而显得很无聊 nbsp nbsp nbsp 这个世界是一个强者的世界 只有强者才能生存 任何幻想在这个社会都没有立足之地 因为这个社会不相

    2026年3月20日
    1
  • 【Coze-AI智能体平台】3 步给 AI “植入长期记忆”!Coze 数据库创建 + 数据导入 + 复用教程

    【Coze-AI智能体平台】3 步给 AI “植入长期记忆”!Coze 数据库创建 + 数据导入 + 复用教程

    2026年3月12日
    1
  • java treeNode 树转list

    java treeNode 树转list树转 list 一般转换方式递归 写起来复制 容易出错 这样就可以应用栈的进出规则进行转化 栈先进后出 https baike baidu com item E6 A0 88 fr aladdin publicList TreeNode node2List TreeNodenode 返回结果集 List TreeNode result TreeNode TreeNode

    2025年9月23日
    7
  • (others)ICMP报文详解系列「建议收藏」

    (others)ICMP报文详解系列「建议收藏」Linuxicmp学习笔记之一icmp协议相关的格式分类: linux网络2014-04-1723:45 487人阅读 评论(0) 收藏 举报Linuxicmp功能分析之一 icmp协议相关的格式 ICMP协议是网络层中一个非常重要的协议,其全称为Internet Control Message Protocol(因特网控制报文协议

    2022年5月24日
    33
  • SQL模糊查询语句(like)

    SQL模糊查询语句(like) 确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用=和!=字符串比较运算符相比,使用通配符可使LIKE运算符更加灵活。如果任何参数都不属于字符串数据类型,MicrosoftSQLServer会将其转换成字符串数据类型(如果可能)。语法mat

    2022年5月26日
    176

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号