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

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应用需要改动的地方也不多.希望大家试试改造一番,用于自己的网站,不过很多网站已经有这样的应用了,哈哈!

转载于:https://www.cnblogs.com/xiongeee/archive/2007/10/31/943989.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程背景 CRM(客户关系系统)一直是企业中必备的软件系统,企业通过CRM系统,可以建立与客户之间的联系,保持与客户之间良好的沟通,从而建立商机。可以说,CRM系统对于企业来讲是至关重要的。在中国,CRM系统的还没有被广泛的应用,但是在外国,CRM系统已经被很多企业所接受,应用范围十分广泛,并且也有很多成熟优秀的CRM产品。可以说,市场上对于CRM系统的需求还有很大的上升空间。本课程以一个现实的CRM系统为原型,在对系统需求分析的基础上,对系统进行了设计并且实现。由于课程时间有限,对于CRM系统的功能只实现了一部分,但是已经涵盖了全部的CRM系统的技术点。 1.2、课程内容介绍 在本课程当中,主要讲述了3个核心的知识点。第一个知识点是EasyJWeb框架,这也是国人自主研发的一款优秀的MVC框架。EasyJWeb框架是基于Velocity模板技术的,所有的页面都是静态HTML页面,省略了JSP的编译过程,大大提高了系统的访问速度。EasyJWeb对于中小型的软件项目来说是十分优秀的,内置的Action可以轻易的捕获前台的请求,而EasyJWeb提供了类似于DWR的Ajax技术,大大简化了Ajax的调用过程,提高了开发效率和运行速度。作为国内的MVC框架,EasyJWeb并没有struts2那么大的名气,但是EasyJWeb的初衷就是想要取代struts2的市场份额,在此课程中,我们也为国内自主研发的软件尽一份力量。 第二个知识点是服务调度。这个主意是针对于性能优化的方案,其核心是一种分布式的架构思想,具体的实现手段有很多种,在本课程我们使用了RMI技术来完成。通常我们会将一个完成的程序包运行在Web容器(tomcat或其他)中,容器除了要负责接受前台的请求和返回响应以外,还需要开辟大量的内存来负责数据的处理,逻辑的运算,算法的解析等。一个Web容器的内存是有限的,但是绝大多数的内存都用来处理后台的运算,那么用来接收客户请求的资源就会减少,这样就会使系统的并发数下降。为了提高系统的性能,本课程中的服务调度实际上将系统的前台和后台进行分离,Web容器只服务接收请求和返回响应,一切的数据操作和逻辑运算都交给独立的服务端运行,这样可以极大程度的提高系统的并发数。 第三个知识点是自定义邮件引擎,针对于CRM系统来说,大批量的持续发送邮件是一个很重要的功能,但是普通的邮件群发是无法完成的,邮件服务器会对邮件进行过滤和处理,为了能够尽可能的提高邮件发送的准确性,在本课程中专门讲解了一个邮件调度的功能,以邮件任务为集合,将多个邮件变成邮件任务,然后通过线程和其他的一些控制手段,提高邮件发送的准确性。
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架和框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值