Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1376264
  • 博文数量: 205
  • 博客积分: 6732
  • 博客等级: 准将
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 17:59
文章分类

全部博文(205)

文章存档

2016年(1)

2015年(10)

2014年(1)

2013年(39)

2012年(23)

2011年(27)

2010年(21)

2009年(55)

2008年(28)

我的朋友

分类: Java

2011-07-14 10:54:53

任务调度简介
       Spring包含了对定时调度服务的内置支持类。当前,Spring支持从JDK1.3开始内置的Timer类和Quartz Scheduler。二者都可以通过FactoryBean,分别指向TimerTrigger实例的引用进行配置。更进一步,有个对Quartz SchedulerTimer都有效的工具类可以让你调用某个目标对象的方法(类似通常的MethodInvokingFactoryBean操作)。Spring 还包含有用于线程池调度的类,它针对Java 1.3,1.4,5JEE环境的差异都进行了抽象。
8.1.2 Spring中使用Quartz
Quartz 是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SEJ2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。而在日常开发中我们也是优先使用Quartz进行计划任务的调度。
Scheduler代表一个Quartz的独立运行容器我们的任务需要由它来进行执行,请看下面的代码清单
代码清单1
<bean id="scheduler" class="org.springframework.scheduling.quartz.
 SchedulerFactoryBean">
    <property name="triggers">
        <list>
           <ref local="estimateLogTriggerQuartz" />
       list>
    property>
bean>
配置触发器调度的Bean -->
<bean id="estimateLog" class="org.springframework.scheduling.quartz.
MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="estimateLogTrigger" />
   
<property name="targetMethod" value="doSaveEstimateLog" />
bean>
配置触发器 -->
<bean id="estimateLogTriggerQuartz" class="org.springframework.scheduling.quartz. CronTriggerBean">
    <property name="jobDetail" ref="estimateLog" />
    <property name="cronExpression" value="0 55 23 L * ?" />
bean>
代码清单1中配置了一个名为SchedulerFactoryBeanCronTriggerBeanMethodInvokingJobDetailFactoryBeanBean这是Spring为了降低Quartz的使用难度,为创建QuartzSchedulerTriggerJobDetail提供了便利的FactoryBeanSchedulerFactoryBeantriggers的属性为triggers[]类型,可以通过该属性注册多个TriggerBean estimateLogTriggerQuartz定义了jobDetail执行的时间和执行的方法。定义触发器执行的就是0 55 23 L * ? 这段表达式,这个表达式定义了在每月的最后一天L2355执行。
8.2 Spring的邮件支持
       8.2.1Spring邮件的简介
Spring提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。Springorg.springframework.mail.javamail包下提供了对JavaMail邮件系统的支持,通过这些支持类,编写JavaMail邮件发送程序变得轻松易行。
1)发送普通邮件
       代码清单1
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
 
public class SendMail {
     public static void main(String args[]){
        JavaMailSenderImpl senderimpl = new JavaMailSenderImpl();
        Properties properties = new Properties();
        properties.setProperty("mail.smtp.auth", "true");
        senderimpl.setJavaMailProperties(properties);
        // 设定mail server
        senderimpl.setHost("smtpcom.263xmail.com");
         //设置用户名和密码
         senderimpl.setUsername("tony");
         senderimpl.setPassword("tony");
         //建立邮件消息
         SimpleMailMessage mailmessage = new SimpleMailMessage();
         //设置收件人
         String[] array = new String[]{"",
""};
         mailmessage.setTo(array);
         //设置寄件人
         mailmessage.setFrom("");
         //设置邮件主题
         mailmessage.setSubject("Test");
         //设置邮件内容
         mailmessage.setText("Test Send Mail");
         //发送邮件
         senderimpl.send(mailmessage);
         System.out.println("Send success.....");
    }
}
代码清单1中首先初始化了一个JavaMailSenderImpl实例,然后设置邮件服务器的端口地址,发送人的帐户和密码。SimpleMailMessage对象代表了邮件信息,包含一系列的属性。通过代码清单1我们可以很方便的发送一封邮件或者群发邮件。下面再介绍一下发送HTML格式的邮件。
    2)发送HTML邮件
    代码清单2
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
public class SendMail {
     public static void main(String args[]){
        JavaMailSenderImpl senderimpl = new JavaMailSenderImpl();
        Properties properties = new Properties();
        properties.setProperty("mail.smtp.auth", "true");
        senderimpl.setJavaMailProperties(properties);
        // 设定mail server
        senderimpl.setHost("smtpcom.263xmail.com");
         //设置用户名和密码
         senderimpl.setUsername("tony");
         senderimpl.setPassword("tony");
         //建立邮件消息
         MimeMessage mimeMessage = senderimpl.createMimeMessage();
         MimeMessageHelper messagehelper = new MimeMessageHelper(mimeMessage);
         try {
           //设置寄件人
           messagehelper.setFrom("");
           //设置收件人
           messagehelper.setTo("");
           //设置邮件主题
           messagehelper.setSubject("Test HTML");
           //true 表示启动HTML格式的邮件
           messagehelper.setText("Hello World ! ",true);
           } catch (MessagingException e) {e.printStackTrace();}
         //发送邮件
         senderimpl.send(mimeMessage);
         System.out.println("Send success.....");
    }
}
    根据代码清单2我们可看到只需要简单的设置
messagehelper.setText("
Hello World ! ",true);第二个参数为true就可以发送HTML格式的邮件。
    3)发送含有附件和内嵌文件的邮件
    代码清单3
import java.io.IOException;
import java.util.Properties;
 
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
 
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
public class SendMail {
    public static void main(String args[]) throws MessagingException,
           IOException {
       JavaMailSenderImpl senderimpl = new JavaMailSenderImpl();
       Properties properties = new Properties();
       properties.setProperty("mail.smtp.auth", "true");
       senderimpl.setJavaMailProperties(properties);
       // 设定mail server
       senderimpl.setHost("smtpcom.263xmail.com");
       // 设置用户名和密码
       senderimpl.setUsername("*****@crimsonlogictj.com");
       senderimpl.setPassword("*****");
       // 建立邮件消息
       MimeMessage mimeMessage = senderimpl.createMimeMessage();
 
MimeMessageHelper messagehelper =
new MimeMessageHelper(mimeMessage, true, "UTF-8");
       // 设置寄件人
       messagehelper.setFrom("*****@crimsonlogictj.com");
       // 设置收件人
       messagehelper.setTo("*****@crimsonlogictj.com");
       // 设置邮件主题
       messagehelper.setSubject("Test HTML");
       // true 表示启动html格式的邮件
       messagehelper.setText(
           "" +
           "" +
//HTML文本中嵌入了一个名为 cid:img1 的图片
           "

Hello World

"
,
           true);
       //定义图片
       ClassPathResource img = new ClassPathResource("01.jpg");
       //定义附件1
       ClassPathResource file2 = new ClassPathResource("02.jpg");
       //定义附件2
       ClassPathResource file3 = new ClassPathResource("03.jpg");
       //将图片加入
       messagehelper.addInline("img1", img.getFile());
       //将附件1加入
       messagehelper.addAttachment(file2.getFile().getName(),
file2.getFile());
       //将附件2加入
       messagehelper.addAttachment(file3.getFile().getName(),
                                   file3.getFile());
       // 发送邮件
       senderimpl.send(mimeMessage);
       System.out.println("Send success.....");
    }
}
从代码清单3中我们可以看到为一封邮件嵌入图片和加入附件都非常简单,但是在实际应用中不建议大家在邮件中嵌入图片文件或者声音文件,因为这样会增加邮件的大小,影响了邮件发送的效率,建议还是架设一个专用的服务器用于存放图片文件,在邮件中直接通过URL来引用这些文件。
 
回复网络时空兄弟 以下是我的代码结构.
 
阅读(1394) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~