SpringBoot日記——任務處理 之 異步、定時、郵件

---恢復內容開始---html

  直接步入正題。java

異步任務

  異步任務比較簡單,只須要兩個註解就能夠搞定,咱們直接來看如何使用:web

  一、建立一個service,帶上@EnableAsync,就是開啓異步任務的註解模式。spring

  二、在須要異步處理的方法前加上註解@Async,該方法就會按照異步處理了。瀏覽器

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;

@EnableAsync
@Service
public class AsyncService {

    @Async
    public void asynv() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("數據處理中……");
    }
}

  那如何來證實咱們的異步處理是能夠的呢?安全

  一、寫一個controller,咱們瀏覽器中訪問一下以前沒有加註解的頁面,應該是須要等待3秒,纔有相應返回success的;服務器

  二、加上異步處理的註解,咱們再次訪問,就會發現,相應變的很快了;這就是異步處理任務成功了。app

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AsyncController {

    @Autowired
    AsyncService asyncService;

    @GetMapping("/hello")
    public String hello() {
        asyncService.asynv();
        return "success";
    }

}

 

定時任務

  定時任務在平時的工做中,常常被用到,好比日誌處理、或者天天凌晨進行自動化腳本、或者每個月生成報表之類的。異步

  一樣只須要了解兩個註解就能夠了。async

  咱們來建立一個service看下(執行主程序,你會發現,每到0秒的時候就會打印一個hello):

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@EnableScheduling
@Service
public class ScheduledService {

    /**
     * minute, hour, day of month, month, day of week
     * 格式:"0 * * * * 1-5"
     * 說明:舉例的格式表示週一到週五的每分鐘整,若是把0換成*就是每週一到週五的每秒處理任務了
     *
     * 其餘:處理具體值,這個式子中還支持一些特殊符號,好比:
     *      , 表示 枚舉。 1,2,3,4 表示每分鐘的1,2,3,4秒的時候執行
     *      - 表示 區間。 0-4就是0到4秒之間,每秒執行,同上邊
     *      * 表示 任意。 每的意思
     *      ? 表示 日/星期衝突匹配。 好比咱們設置了mon,又設置了天天。那麼爲了匹配,咱們要把*換成?
     *      / 表示 步長。 0/4就是每4秒執行一次
     *      L 表示 最後。
     *      W 表示 工做日。
     *      C 表示 和calendar聯繫並計算後的值。
     *      # 表示 星期,4#2就是第二個星期四。
     */
    @Scheduled(cron = "0 * * * * 1-5")
    public void scheduled() {
        System.out.println("hello");
    }
}

  爲了更好的幫助理解,這裏再舉例幾個:

    【0 0/5 12,18 * * ?】         天天12點和18點,從整點開始,每隔5分鐘執行一次
    【0 0 2 ?  * 1L】           天天月的最後一個星期一的凌晨2點執行一次

 

郵件任務

  郵件任務,須要引入這個到pom

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
  </dependency>

  爲了收發郵件,確定是要先配置一下郵件的收發方,以及郵件發送的帳號和密碼(放心不是我的登陸密碼)。

  注意看下邊password和host的填寫:

  1.password:我以網易郵箱爲例,在郵箱設置裏,會有POP3/SMTP這類的設置,咱們就是用這種方式來使用郵箱的。當咱們勾選了這個SMTP服務之後,會出現一系列的彈窗,讓咱們確認使用受權碼登陸第三方郵件的客戶端,也就是說,咱們用生成的受權碼,做爲咱們須要的郵箱登陸密碼便可,這個是安全

  2.host:就是下邊紅框中的服務器地址了

spring.mail.username=ice@163.com
spring.mail.password=sjaksiquskaosjeq
spring.mail.host=smtp.163.com
# 下邊的properties是配置郵件的其餘信息,好比通常郵箱都須要這個SSL的安全設置
spring.mail.properties.mail.smtp.ssl.enable=true

  如此一來,咱們配置好了郵箱信息,開始寫一個測試類看下:

  1.先發送一個簡單的郵件作測試,執行測試後,去到收件的郵箱查看,應該就能夠看到咱們發送的郵件了,表示成功!

@RunWith(SpringRunner.class)
@SpringBootTest
public class TaskApplicationTests {

    @Autowired
    JavaMailSenderImpl javaMailSender;

    @Test
    public void contextLoads() {
        SimpleMailMessage message = new SimpleMailMessage();
        // 設置郵件信息
        message.setSubject("這個是郵件標題的設置");
        message.setText("這個是郵件的內容");

        message.setTo("1234@qq.com","xxxx");    // 能夠給多人發
        message.setFrom("ice@163.com");     // 由誰發送

        javaMailSender.send(message);
    }

}

  2.除了上述這個簡單的郵件,咱們再看看,如何發送帶有html或者附件之類的內容的郵件,而後去到郵箱看看是否成功吧!

    @Test
    public void test() throws Exception {
        // 建立一個複雜消息的郵件
        MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMailMessage, true);
        // 發送html格式信息
        helper.setSubject("這個是郵件標題的設置");
        helper.setText("<b style='color:red'>這個是郵件的內容</b>", true);

        helper.setTo("1234@qq.com");
        helper.setFrom("ice@163.com");     // 由誰發送

        // 上傳附件
        helper.addAttachment("a.jpg", new File("C:\\User\\ice\\Pictures\\a.jpg"));
        helper.addAttachment("b.jpg", new File("C:\\User\\ice\\Pictures\\b.jpg"));

        javaMailSender.send(mimeMailMessage);
    }
相關文章
相關標籤/搜索