Spring的任务调度和邮件发送

感谢网友 网络时空 兄弟对我的提醒,我已经把邮件发送中加上了邮件嵌入图片和增加附件方面的内容.谢谢
8.1.1 任务调度简介
       Spring 包含了对定时调度服务的内置支持类。当前, Spring 支持从 JDK1.3 开始内置的 Timer 类和 Quartz Scheduler 。二者都可以通过 FactoryBean ,分别指向 Timer Trigger 实例的引用进行配置。更进一步,有个对 Quartz Scheduler Timer 都有效的工具类可以让你调用某个目标对象的方法(类似通常的 MethodInvokingFactoryBean 操作)。 Spring 还包含有用于线程池调度的类,它针对 Java 1.3,1.4,5 JEE 环境的差异都进行了抽象。
8.1.2 Spring 中使用Quartz
Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件, 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" >
<!-- 引用一个 Bean -->
< property name = "targetObject" ref = "estimateLogTrigger" />
<!-- 指定目标 Bean 的方法 -->    
< property name = "targetMethod" value = "doSaveEstimateLog" />
</ bean >
<!―- 配置触发器 -->
< bean id = "estimateLogTriggerQuartz" class = "org.springframework.scheduling.quartz. CronTriggerBean" >
    < property name = "jobDetail" ref = "estimateLog" />
<!-- 每月最后一天 23.55 执行 -->
    < property name = "cronExpression" value = "0 55 23 L * ?" />
</ bean >
代码清单 1 中配置了一个名为 SchedulerFactoryBean CronTriggerBean MethodInvokingJobDetailFactoryBean Bean 这是 Spring 为了降低 Quartz 的使用难度,为创建 Quartz Scheduler Trigger JobDetail 提供了便利的 FactoryBean SchedulerFactoryBean triggers 的属性为 triggers[] 类型 , 可以通过该属性注册多个 Trigger Bean estimateLogTriggerQuartz 定义了 jobDetail 执行的时间和执行的方法。定义触发器执行的就是 0 55 23 L * ? 这段表达式,这个表达式定义了在每月的最后一天 L 23 55 执行。
8.2 Spring 的邮件支持
       8.2.1 Spring 邮件的简介
Spring 提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层的资源处理。 Spring org.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[]{ "[email protected]" ,
         mailmessage.setTo(array);
         // 设置寄件人
         mailmessage.setFrom( "[email protected]" );
         // 设置邮件主题
         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( "[email protected]" );
           // 设置收件人
           messagehelper.setTo( "[email protected]" );
           // 设置邮件主题
           messagehelper.setSubject( "Test HTML" );
           //true 表示启动 HTML 格式的邮件
           messagehelper.setText( "<html><head></head><body>Hello World ! </body></html>" , true );
           } catch (MessagingException e) {e.printStackTrace();}
         // 发送邮件
         senderimpl.send(mimeMessage);
         System. out .println( "Send success....." );
    }
}
    根据代码清单 2 我们可看到只需要简单的设置
messagehelper.setText( "<html><head></head><body>
Hello World ! </body></html>" , 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><head></head><body>" +
           "<img src=\"cid:img1\"></img>" +
// HTML 文本中嵌入了一个名为 cid:img1 的图片
           "<h1>Hello World</h1></body></html>" ,
           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 来引用这些文件。
 
回复网络时空兄弟 以下是我的代码结构.
 
我的其它Spring文章,也许会对您有帮助
 
Spring的任务调度和邮件发送
 
Spring应用的单元测试
 
Spring的数据库支持
 
Spring的MVC框架
 
Spring的IoC容器
 
Spring对AOP的支持
 
Spring2.5注释驱动与基于注释的MVC
 

你可能感兴趣的:(java,spring,javaee,休闲,绝缘材料)