Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。下面介绍在J2SE中应用的邮件发送工作调度程序.
           Quartz要运行起来,最简单需要1. ***Job  自己实现的工作类 ;2. ***Quartz 调度你实现的工作类.
           一.  ***Job.java 实现Quartz框架的Job接口.
/**
 *
 * Title:     发送邮件工作类  
 * Copyright:    Copyright (c) 2006
 * Company:      stone
 * @author:     yangstone
 * @version 1.0
 */
package org.yq.myQuartz.jobs;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.yq.myQuartz.utils.MailJobUtil;

/**
 * @ MailJob.java
 * 描述:
 * @author yangstone 
 * 创建日期:2006-3-18
 * @version bookstore 1.0
 * 杨强 [stone] 版权所有
 */
public class MailJob implements Job{

private static Log _log = LogFactory.getLog(MailJob.class);
   
    public static final String FROMMAIL = "fromMail";
    public static final String TOMAIL = "toMail";
    public static final String CONTENT = "content";
    public static final String SUBJECT = "subject";

public void execute(JobExecutionContext context) throws JobExecutionException {
        JobDataMap data = context.getJobDetail().getJobDataMap();
        MailJobUtil.sendMail(data.getString(FROMMAIL),
                data.getString(TOMAIL), data.getString(CONTENT), data.getString(SUBJECT));
       
    }

}
二.  ***Quartz.java 调度自己实现的Job类,主要是通过Quartz中的触发器用来告诉调度程序作业什么时候触发.    
/**
 *
 * Title:     执行工作类
 * Copyright:    Copyright (c) 2006
 * Company:      stone
 * @author:     yangstone
 * @version 1.0
 */
package org.yq.myQuartz.execute;

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.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
import org.yq.myQuartz.jobs.MailJob;

/**
 * @ myEmailQuartz.java
 * 描述:
 * @author yangstone 
 * 创建日期:2006-3-18
 * @version bookstore 1.0
 * 杨强 [stone] 版权所有
 */
public class myEmailQuartz {

public void run() throws Exception {
        Log log = LogFactory.getLog(myEmailQuartz.class);

log.info("------- Initializing -------------------");

// First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

log.info("------- Initialization Complete --------");

log.info("------- Scheduling Jobs ----------------");

JobDetail job1 = new JobDetail("job1", "group1", MailJob.class);
       
        Trigger trigger = TriggerUtils.makeDailyTrigger(23, 00); //每日 23:00触发工作执行
        trigger.setName("trigger1");
        trigger.setGroup("group1");
        trigger.setJobName("job1");
        trigger.setJobGroup("group1");

// pass initialization parameters into the job
        job1.getJobDataMap().put(MailJob.FROMMAIL, "*****");
        job1.getJobDataMap().put(MailJob.TOMAIL, "*****");
        job1.getJobDataMap().put(MailJob.CONTENT, "*****");
        job1.getJobDataMap().put(MailJob.SUBJECT, "*****");
       
        // schedule the job to run
        Date scheduleTime1 = sched.scheduleJob(job1, trigger);
        log.info(job1.getFullName() +
                " will run at: " + scheduleTime1);
        log.info(job1.getFullName() +
                " will run at: " + scheduleTime1 );

log.info("------- Starting Scheduler ----------------");

// All of the jobs have been added to the scheduler, but none of the jobs
        // will run until the scheduler has been started
        sched.start();

log.info("------- Started Scheduler -----------------");
       
        log.info("------- Waiting 60 seconds... -------------");
        try {
            // wait five minutes to show jobs
            Thread.sleep(60L * 1000L);
            // executing...
        } catch (Exception e) {
        }

log.info("------- Shutting Down ---------------------");

sched.shutdown(true);

log.info("------- Shutdown Complete -----------------");

SchedulerMetaData metaData = sched.getMetaData();
        log.info("Executed " + metaData.numJobsExecuted() + " jobs.");

}

public static void main(String[] args) throws Exception {

myEmailQuartz example = new myEmailQuartz();
        example.run();
    }
}
       
至此,一个简单的应用Quartz进行日发送邮件的程序已经完成.
         以下是发送邮件的简单实现程序:
/**
 *
 * Title:    发送邮件类      
 * Copyright:    Copyright (c) 2006
 * Company:      stone
 * @author:     yangstone
 * @version    1.0
 */
package org.yq.myQuartz.utils;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * @ SendMail.java
 * 描述:
 * @author yangstone 
 * 创建日期:2006-3-18
 * @version bookstore 1.0
 * 杨强 [stone] 版权所有
 */
public class SendMail {
    private String tomail;
      private String frommail;
      private String subject;
      private String content;
      private String imagecard;
      String smtp="smtp.*****.com";//设置邮件服务器

public SendMail() {
      }
      public String getTomail() {
        return tomail;
      }
      public void setTomail(String tomail) {
        this.tomail = tomail;
      }
      public String getFrommail() {
        return frommail;
      }
      public void setFrommail(String frommail) {
        this.frommail = frommail;
      }
      public String getSubject() {
        return subject;
      }
      public void setSubject(String subject) {
        this.subject = subject;
      }
      public String getContent() {
        return content;
      }
      public void setContent(String content) {
        this.content = content;
      }
      public String getImagecard() {
        return imagecard;
      }
      public void setImagecard(String imagecard) {
        this.imagecard = imagecard;
      }

/**
       *
      * 描述:发送邮件
      * @return true:发送成功 false:发送失败
      * @author{user}
      * 创建时间:2006-3-19
       */
      public boolean sendMail(){
       try{
         Properties p=System.getProperties();
         p.put("mail.smtp.host",this.smtp);
         p.put("mail.smtp.auth","true");  //设置为须验证的模式
        
         Authenticator auth = new Email_ca("邮箱用户名","密码");
         Session session=Session.getDefaultInstance(p, auth);
         MimeMessage msg=new MimeMessage(session);
         msg.setSentDate(new Date());
         InternetAddress from=new InternetAddress(frommail);
         msg.setFrom(from);
         InternetAddress[] address = {
             new InternetAddress(tomail)};
         msg.setRecipients(Message.RecipientType.TO, address);
         msg.setSubject(this.subject); //设置邮件主题
         msg.setText(this.content); //设置邮件内容
         Transport.send(msg);
         return true;
       }catch(AddressException addr_e){
         System.out.println(addr_e.getMessage());
         return false;
       }catch(MessagingException msg_e){
         System.out.println(msg_e.getMessage());
         return false;
       }
    }
}

/**
 *
 * Title:      邮箱身份认证类
 * Copyright:    Copyright (c) 2006
 * Company:      stone
 * @author:     yangstone
 * @version 1.0
 */
package org.yq.myQuartz.utils;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * @ Email_ca.java
 * 描述:
 * @author yangstone 
 * 创建日期:2006-3-18
 * @version bookstore 1.0
 * 杨强 [stone] 版权所有
 */
public class Email_ca extends Authenticator{
    private String user=null;
      private String pwd=null;
      public Email_ca(){
        super();
      }
      public void setUser(String user){
        this.user=user;
      }
      public void setPwd(String pwd){
        this.pwd=pwd;
      }
      public Email_ca(String user,String pwd){
        super();
        setUser(user);
        setPwd(pwd);
      }
      public PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(user,pwd);
      }
}

/**
 *
 * Title:      邮件发送工具类
 * Copyright:    Copyright (c) 2006
 * Company:      stone
 * @author:     yangstone
 * @version 1.0
 */
package org.yq.myQuartz.utils;

/**
 * @ MailJob.java
 * 描述: 用于QUARTZ调用的门面
 * @author yangstone 
 * 创建日期:2006-3-18
 * @version bookstore 1.0
 * 杨强 [stone] 版权所有
 */
public class MailJobUtil {
   
    /**
     *
    * 描述:
    * @param fromMail 发送邮箱
    * @param toMail 送至邮箱
    * @param content 邮件内容
    * @param subject 邮件主题
    * @author yangstone
    * 创建时间:2006-3-19
     */
    public static void sendMail(String fromMail, String toMail, String content, String subject){
        SendMail se = new SendMail();
        se.setFrommail(fromMail);
        se.setTomail(toMail);
        se.setContent(content);
        se.setSubject(subject);
        se.sendMail();
    }
}

log4j.xml 配置日志输出格式

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="default" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
    </layout>
  </appender>

<logger name="org.quartz">
   <level value="debug" />
 </logger>

<root>
    <level value="debug" />
    <appender-ref ref="default" />
  </root>

</log4j:configuration>

上面这个邮件发送程序非常实用,很多系统都应该可以用到,要应用于WEB应用需要改动的地方也不多.希望大家试试改造一番,用于自己的网站,不过很多网站已经有这样的应用了,哈哈!

Quartz应用----发送邮件工作调度Java(转)相关推荐

  1. Quartz实线定期运行程序(Java)

    Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 如下是写的一个样例程序,定时输出 hello world: package timeutil; import java.te ...

  2. 【Linux 内核】调度器 ① ( 调度器概念 | 调度器目的 | 调度器主要工作 | 调度器位置 | 进程优先级 | 抢占式调度器 | Linux 进程状态 | Linux 内核进程状态 )

    文章目录 一.调度器 0.调度器概念 1.调度器目的 2.调度器主要工作 3.调度器位置 4.进程优先级 5.抢占式调度器 二.Linux 内核进程状态 API 简介 三.Linux 进程状态 一.调 ...

  3. Quartz.net 开源job调度框架(二)----定点执行

    在上一篇  Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...

  4. 题解 P2949 【[USACO09OPEN]工作调度Work Scheduling】

    P2949 [USACO09OPEN]工作调度Work Scheduling 题目标签是单调队列+dp,萌新太弱不会 明显的一道贪心题,考虑排序先做截止时间早的,但我们发现后面可能会出现价值更高却没有 ...

  5. 如何创建一个Quartz.NET的工作,需要注射autofac

    问题: 使用 Quartz.Net 做定时任务时,实现IJob对象的服务,Autofac不会自动注入,使用构造函数会直接出现异常,无法执行Execute方法. 解决方式 方法一: 使用 Autofac ...

  6. 十七、.net core(.NET 6)搭建基于Quartz组件的定时调度任务

     搭建基于Quartz组件的定时调度任务 先在package包项目下,添加Quartz定时器组件: 新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫Qu ...

  7. 石化行业工作调度,如何选择合适的防爆对讲机?

    防爆对讲机是指可以在爆炸性气体环境下工作的对讲机,而并非对讲机本身有抵抗爆炸的能力.通常来说,防爆对讲机可以适用于石油.煤矿.化工.火电.食品加工等存在危险可燃性气体或粉尘的环境. 石化行业工作调度, ...

  8. zk和quartz实现分布式定时调度

    zk和quartz实现分布式定时调度 https://blog.csdn.net/lanjian056/article/details/52711318

  9. java 2年11k工资是否辞职_初中学历,从制造业工作转行Java开发,毕业收获月薪11k

    初中学历,从制造业工作转行Java开发,毕业收获月薪11k 时间:2018-08-22     来源:未知 小陈学历不高,来华清学习之前,在制造行业工作了很多年,也当到了车间主任的位置,但是工厂的环境 ...

最新文章

  1. 教育部最新通知,中高考又有大变化,学生欲哭无泪,家长炸锅了
  2. 从flink-example分析flink组件(1)WordCount batch实战及源码分析
  3. DeepLearning:pydot安装的使用和安装
  4. 计算机信息导论论文,电子信息导论论文2000字
  5. Java IO: 流
  6. 操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)
  7. getbook netty实战_Netty 入门教程
  8. vba 添加outlook 签名_利用VBA发送附件电子邮件
  9. eclipse中怎么复制错误提示
  10. 在PyCharm中自动添加文件头、时间日期等信息
  11. [转] PostgreSQL的PITR技术(Point-In-Time-Recovery)
  12. 用glew,glfw实现的opengl 学习笔记2画一个四方形
  13. QQ浏览器怎么关闭云加速 QQ浏览器云加速关闭方法
  14. 华为模拟器ENSP下载与安装详细教程(win10 LTSC系统中安装)
  15. 苹果服务器装系统教程视频教程,苹果“雪豹”服务器系统安装傻瓜教程(多图)...
  16. getActivePinia was called with no active Pinia. Did you forget to install pinia?
  17. 分享史上java最牛逼 最简短的代码
  18. Oracle EBS 工具栏按钮失效
  19. html获取cookie数据,cookies数据是什么意思?
  20. 我的世界java版海岛种子_我的世界孤岛种子代码 1.8海岛生存种子

热门文章

  1. 中国水处理行业十四五趋势规划与布局动态分析报告2022年
  2. 全球及中国矿棉板行业运营能力状况与十四五规模预测报告2022年
  3. Java中配置加密组件Bouncy_Castle
  4. oracle安装就是home3,rhel3上安装Oracle(来自Oracle网站)
  5. 对话尹成杰三农谋定压舱石-农业大健康·万祥军:稳农保供
  6. maven打war包
  7. 网站推广必备手册:SEO教程:搜索引擎优化入门与进阶(第2版)
  8. 安装Matlab出现Error 1935错误解决方法
  9. mybatis 解析Integer为0的属性,解析成空字符串
  10. WmS详解(一)之token到底是什么?基于Android7.0源码