---恢復內容開始---
直接步入正題。
異步任務
異步任務比較簡單,只需要兩個注解就可以搞定,我們直接來看如何使用:
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); }