---恢復內容開始---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); }