異步、郵件、定時任務


14. 異步、郵件、定時任務

14.1 異步任務

編寫一個業務測試類

文件路徑:com--dzj--service--AsynService.java

@Service
public class AsynService {

    @Async   //告訴spring這是一個異步的方法
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("數據正在處理...");
    }
}

在主啟動器類上開啟異步注解功能

@EnableAsync  //開啟異步注解功能
@SpringBootApplication

編寫測試接口

@RestController
public class AsynController {

    @Autowired
    AsynService asynService;

    @RequestMapping("/hello")
    public String hello(){
        asynService.hello();//停止三秒才執行,頁面轉圈~
        return "OK";
    }
}

14.2 郵件任務

導入相關依賴

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

在郵箱設置中開啟POP3/SMTP服務

點擊我已發送,獲得授權碼

編寫相關配置文件

application.yaml

spring:
  mail:
    username: aadzj@qq.com
    password:             #填寫上面的授權碼作為密碼
    host: smtp.qq.com
    properties:
      mail:
        smtp:
          ssl:
            enable: true  # 開啟加密驗證

在測試類中測試郵件發送

package com.dzj;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@SpringBootTest
class Springboot09AsynchronousApplicationTests {

    @Autowired
    JavaMailSender mailSender;

    @Test
    void contextLoads() {

        //一個簡單郵件的發送
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject("支付寶到賬80萬元");  //郵件主題
        mailMessage.setText("項目收入");            //郵件正文
        mailMessage.setTo("aadzj@qq.com");         //收件人
        mailMessage.setFrom("aadzj@qq.com");       //發件人
        mailSender.send(mailMessage);
    }

    @Test
    void contextLoads2() throws MessagingException {
        //一個復雜郵件的發送,組裝
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //正文
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("支付寶到賬100萬元");  //郵件主題
        helper.setText("<p style='color:red'>工資收入</p>",true);  //郵件正文
        //附件
        helper.addAttachment("1.jpg",new File("E:\\Good Study\\dengzj.jpg"));
        helper.addAttachment("2.jpg",new File("E:\\Good Study\\dengzj.jpg"));
        helper.setTo("aadzj@qq.com");     //收件人
        helper.setFrom("aadzj@qq.com");   //發件人
        mailSender.send(mimeMessage);
    }

}

運行測試!

14.3 定時任務

文件路徑:com--dzj--service--ScheduledService.java

編寫業務測試類

package com.dzj.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

@Service
public class ScheduledSercvice {

    @Autowired
    JavaMailSender mailSender;
    /*
        在一個特定的時間執行這個方法
        cron  表達式~ 秒 分 時 日 月 周幾
        cron="10 20 10 * * ?" 每天的10點20分10秒 執行一次
        cron="10 0/5 10,18 * * ?"  每天10點和18點,從第零分鍾開始,每隔五分鍾,第10秒執行一次
        cron="0 15 10 ? * 1-6"   每個月的周一到周六  10點15分執行一次
        cron="0/2 * * * * ?" 每隔兩秒執行一次
     */

    @Scheduled(cron="0/10 * * * * ?")
    public void hello(){
        System.out.println("你被執行了。。。");
    }

    @Scheduled(cron="0/10 * * * * ?")
    public void sendMail(){
        //一個簡單郵件的發送
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setSubject("支付寶到賬80萬元");
        mailMessage.setText("項目收入");
        mailMessage.setTo("aadzj@qq.com");
        mailMessage.setFrom("aadzj@qq.com");
        mailSender.send(mailMessage);
        System.out.println("郵件已發送");
    }
}

在主啟動器類上開啟定時注解功能

@EnableScheduling //開啟定時注解功能
@SpringBootApplication

運行測試!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM