文章目錄
- 一、異步任務
- 二、定時任務
- 三、郵件發送
一、異步任務
步驟:
- 在需要異步的方法前加上注解:
@Async
- springboot啟動類加上開啟異步的注解:
@EnableAsync
例子:
- 一個service類:有一個test異步方法,停頓6s後輸出XX在控制台。
@Service
public class TestService {
//告訴Spring===》這是一個異步的方法:@Async
@Async
public void test(){
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("資料正在處理........");
}
}
- 在一個controller類中調用上面的service類:
@RestController
public class TestController {
@Autowired
TestService testService;
@RequestMapping("/hello")
public String hello(){
//調用異步方法:
testService.test();
return "Hello";
}
}
通路:http://localhost:8080/hello網頁,由于test()方法為一個異步任務,通路頁面時不會等待
testService.test();
執行完後
return "Hello";
,而是直接
return "Hello";
。
二、定時任務
步驟:
- 在需要定時的方法前加上注解:
@Scheduled(cron = "0 25 13 * * ?")
- springboot啟動類加上開啟定時的注解:
@EnableScheduling
啟動springboot,該方法會在每天的13:25執行
@Service
public class ScheduleService {
// cron表達式~
// 秒 分 時 日 月 周幾~
@Scheduled(cron = "0 25 13 * * ?")
public void test(){
System.out.println("=======執行了=======");
}
}
cron常用表達式:6個參數,空格隔開:秒 分 時 日 月 周幾~
(1)0 0 2 1 * ? * 表示在每月的1日的淩晨2點調整任務
(2)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15執行作業
(3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每個月的最後一個星期五上午10:15執行作
(4)0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
(5)0 0/30 9-17 * * ? 朝九晚五工作時間内每半小時
(6)0 0 12 ? * WED 表示每個星期三中午12點
(7)0 0 12 * * ? 每天中午12點觸發
(8)0 15 10 ? * * 每天上午10:15觸發
(9)0 15 10 * * ? 每天上午10:15觸發
(10)0 15 10 * * ? * 每天上午10:15觸發
(11)0 15 10 * * ? 2005 2005年的每天上午10:15觸發
(12)0 * 14 * * ? 在每天下午2點到下午2:59期間的每1分鐘觸發
(13)0 0/5 14 * * ? 在每天下午2點到下午2:55期間的每5分鐘觸發
(14)0 0/5 14,18 * * ? 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
(15)0 0-5 14 * * ? 在每天下午2點到下午2:05期間的每1分鐘觸發
(16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44觸發
(17)0 15 10 ? * MON-FRI 周一至周五的上午10:15觸發
(18)0 15 10 15 * ? 每月15日上午10:15觸發
(19)0 15 10 L * ? 每月最後一日的上午10:15觸發
(20)0 15 10 ? * 6L 每月的最後一個星期五上午10:15觸發
(21)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最後一個星期五上午10:15觸發
(22)0 15 10 ? * 6#3 每月的第三個星期五上午10:15觸發
三、郵件發送
- 導入依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
-
配置email資訊:
application.properties
[email protected]
spring.mail.password=XXXXXX
spring.mail.host=smtp.qq.com
#開啟密碼驗證
spring.mail.properties.mail.smtp.ssl.enable=true
注意:
spring.mail.password=XXXXXX
這裡的password來自QQEmail開啟POP3獲得的授權碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0cmeOJTWE5keRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0cTMyQzN1MjMyEDMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
-
測試:
在springboot提供的測試類中,JavaMailSenderImpl由我們的spring配置好的:
@SpringBootTest
class Springboot02TestApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads() {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("[測試]:主題");//主題
message.setText("[測試]:内容");//内容
message.setTo("[email protected]");//給誰
message.setFrom("[email protected]");//由誰發的
mailSender.send(message);
}
}
啟動測試類,我們就可以在我們的郵箱中收到了。
複雜郵件發送:
正文加html标簽,攜帶附件…
@SpringBootTest
class Springboot02TestApplicationTests {
@Autowired
JavaMailSenderImpl mailSender;
@Test
void contextLoads2() throws MessagingException {
//複雜郵件MimeMessage
MimeMessage message = mailSender.createMimeMessage();
//組裝
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//正文:
helper.setSubject("[測試]:主題");
helper.setText("<p style='color:red'>[測試]:内容</p>",true);
//附件
helper.addAttachment("測試.docx",new File("C:\\Users\\DELLHL\\Desktop\\note.docx"));
helper.setTo("[email protected]");//給誰
helper.setFrom("[email protected]");//由誰發的
mailSender.send(message);
}
}