Spring的任务调度和邮件发送

简介:
感谢网友 网络时空 兄弟对我的提醒,我已经把邮件发送中加上了邮件嵌入图片和增加附件方面的内容.谢谢
8.1.1 任务调度简介
       Spring 包含了对定时调度服务的内置支持类。当前, Spring 支持从 JDK1.3 开始内置的 Timer类和 Quartz Scheduler 。二者都可以通过 FactoryBean,分别指向TimerTrigger实例的引用进行配置。更进一步,有个对 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]myMail@163.com[/email]" ,
"[email]yourMail@263.com[/email]" };
         mailmessage.setTo(array);
          // 设置寄件人
         mailmessage.setFrom( "[email]myMail@163.com[/email]" );
          // 设置邮件主题
         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]myMail@163.com[/email]" );
            // 设置收件人
           messagehelper.setTo( "[email]yourMail@163.com[/email]" );
            // 设置邮件主题
           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 来引用这些文件。
 
回复网络时空兄弟 以下是我的代码结构.









本文转自 tony_action 51CTO博客,原文链接:http://blog.51cto.com/tonyaction/84008,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
druid Java 数据库
Spring Boot的定时任务与异步任务
Spring Boot的定时任务与异步任务
|
1月前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
|
2月前
|
监控 Java 调度
Spring中的任务调度:探索@Scheduled和@Schedules注解的威力
Spring中的任务调度:探索@Scheduled和@Schedules注解的威力
35 0
|
3月前
|
Java 调度 流计算
在使用Spring Boot启动Flink处理任务时
在使用Spring Boot启动Flink处理任务时【1月更文挑战第22天】【1月更文挑战第108篇】
54 1
|
4月前
|
Java 调度 Docker
Docker【应用 01】Spring Boot 项目部署在Linux环境下的Docker容器内举例(任务调度系统 xxl-job 任务调度中心)(手动版)
Docker【应用 01】Spring Boot 项目部署在Linux环境下的Docker容器内举例(任务调度系统 xxl-job 任务调度中心)(手动版)
70 0
|
5月前
|
Java Spring
spring集成Quartz时区问题造成任务晚执行八小时
spring集成Quartz时区问题造成任务晚执行八小时
|
6月前
|
XML Java 大数据
Spring Batch:处理大数据和批量任务的解决方案
Spring Batch:处理大数据和批量任务的解决方案
193 0
|
7月前
|
XML Java 调度
Spring定时任务-任务执行和调度—官方原版
Spring定时任务-任务执行和调度—官方原版
67 0
|
8月前
|
Java Spring 容器
Spring Boot 定义系统启动任务,你会几种方式?
Spring Boot 定义系统启动任务,你会几种方式?
|
8月前
|
Java Spring
Spring或SpringBoot项目随项目启动而启动线程执行特定任务的方法
项目启动,你是否有需求需要某个任务能随着项目启动就去执行某个任务呢?
363 0