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


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

  直接步入正題。

異步任務

  異步任務比較簡單,只需要兩個注解就可以搞定,我們直接來看如何使用:

  1、創建一個service,帶上@EnableAsync,就是開啟異步任務的注解模式。

  2、在需要異步處理的方法前加上注解@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("數據處理中……");
    }
}

  那如何來證明我們的異步處理是可以的呢?

  1、寫一個controller,我們瀏覽器中訪問一下之前沒有加注解的頁面,應該是需要等待3秒,才有相應返回success的;

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

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";
    }

}

 

定時任務

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

  同樣只需要了解兩個注解就可以了。

  我們來創建一個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);
    }

 


免責聲明!

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



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