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 來引用這些文件。
 
回覆網絡時空兄弟 如下是個人代碼結構.
相關文章
相關標籤/搜索