当前位置:网站首页>Asynchronous, email and scheduled tasks
Asynchronous, email and scheduled tasks
2022-07-03 01:05:00 【Running Wang Mumu sir】
Mission
Asynchronous task
establish
servicepackage , Create a class under itAsyncServiceForgery is processing data , Cause thread delay , Analog synchronization waiting .
package com.hxl.service; import org.springframework.stereotype.Service; @Service public class AsyncService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(" Data processing ...."); } }establish
controllerpackage , Create a class under itAsyncControllerpackage com.hxl.controller; import com.hxl.service.AsyncService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AsyncController { @Autowired AsyncService asyncService; @RequestMapping("/hello") public String hello(){ asyncService.hello(); return " No problem "; } }Access test
http://localhost:8080/hello, At this time, you can find the web page waiting 3 It will appear in secondsNo problemThe words... . This is the situation of synchronous waiting .In order to make the user experience better , Let the user get the message first , Then the background uses multithreading to process the results . We need to add a comment , such ,Springboot Will open a thread pool , To call .
// tell Spring This is an asynchronous method @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(" Data processing ...."); }You also need to add an annotation to the main launcher , Let the asynchronous annotation turn on
@EnableAsync // Turn on the asynchronous annotation function @SpringBootApplication public class SpringbootAsyncApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAsyncApplication.class, args); } }At this time, the test found , The web page will open instantly , But the background data will continue , Until the end of data processing .
Email tasks
Introduce dependencies
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>You can see the relevant email sending dependencies

see
JavaMailSenderImplAfter finding it , Look at the configuration file, that ispropertiesUnder the , We can see the relevant configurationtake QQ The service in the mailbox is turned on , We use IMAP/SMTP service

The configuration file
[email protected] spring.mail.password= Their own QQ Authorization code spring.mail.host=smtp.qq.com spring.mail.properties.mail.smtp.ssl.enable=truetest
package com.hxl; 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.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMessageHelper; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.File; @SpringBootTest class SpringbootAsyncApplicationTests { @Autowired JavaMailSenderImpl mailSender; @Test void contextLoads() { // A simple email SimpleMailMessage message = new SimpleMailMessage(); message.setSubject(" Tomorrow will be a holiday "); message.setText(" direct 10 Day long vacation "); message.setTo("[email protected]"); message.setFrom("[email protected]"); mailSender.send(message); } @Test public void contextLoads2() throws MessagingException { // A complicated email MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setSubject(" Tomorrow will be a holiday "); helper.setText("<b style='color:red'> What do you think </b>",true); // Sending attachments helper.addAttachment("1.jpg",new File(" Path to file ")); helper.addAttachment("2.jpg",new File(" such as :D:\\2.jpg")); helper.setTo("[email protected]"); helper.setFrom("[email protected]"); mailSender.send(mimeMessage); } }Then you can see that our email was sent successfully .
Timing task
TaskExecutor Interface
TaskScheduler Interface
Two notes :
- @EnableScheduling // Note on timing function , In the main boot class
- @Scheduled // When to execute
test
establish
Servicepackage , Create a classScheduledServicepackage com.hxl.service; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @Service public class ScheduledService { // Execute this method at a specific time //cron expression // second branch when Japan month What day of the week // The following sentence is from Monday to Sunday , Of 0 second @Scheduled(cron = "0 * * * * 0-7") public void hello(){ System.out.println("hello, You've been executed "); } }Add... To the main program @EnableScheduling Turn on timed task function
package com.hxl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; @EnableAsync // Turn on the asynchronous annotation function @EnableScheduling // Note on timing function @SpringBootApplication public class SpringbootAsyncApplication { public static void main(String[] args) { SpringApplication.run(SpringbootAsyncApplication.class, args); } }And then it's all right
cron expression
cron:https://baike.baidu.com/item/cron/10952601?fr=aladdin
cron Generation :https://www.bejson.com/othertools/cron/
边栏推荐
- 合并K个已排序的链表
- Key detection and sinusoidal signal output developed by Arduino
- leetcode-2280:表示一个折线图的最少线段数
- Sentry developer contribution Guide - configure pycharm
- Thread start and priority
- 有向图的强连通分量
- matlab将数字矩阵保存为地理空间数据出错,显示下标索引必须为正整数类型或逻辑类型,解决
- Specified interval inversion in the linked list
- Vulkan is not a "panacea"“
- Arduino开发之按键检测与正弦信号输出
猜你喜欢

【AutoSAR 四 BSW概述】

leetcode-849:到最近的人的最大距离

matlab将数字矩阵保存为地理空间数据出错,显示下标索引必须为正整数类型或逻辑类型,解决

First hand evaluation of Reza electronics rz/g2l development board

Understanding and distinguishing of some noun concepts in adjustment / filtering

【AutoSAR 十一 通信相关机制】

1.11 - 总线

leetcode:871. 最低加油次数【以前pat做过 + 最大堆 +贪心】

数学建模之线性规划(含MATLAB代码)

用Go+绘制爱心给心爱的她表白
随机推荐
这不平凡的两年,感谢我们一直在一起!
Inversion de l'intervalle spécifié dans la liste des liens
【AutoSAR 六 描述文件】
12_微信小程序之微信视频号滚动自动播放视频效果实现
Sentry developer contribution Guide - configure pycharm
用Go+绘制爱心给心爱的她表白
18_微信小程序之微信视频号滚动自动播放视频效果实现2.0
【爱死机】《吉巴罗》被忽略的细节
解决ReactNative使用webView存在缓存问题
Leetcode-934: the shortest Bridge
[case sharing] let the development of education in the new era advance with "number"
Matlab saves the digital matrix as geospatial data, and the display subscript index must be of positive integer type or logical type. Solve the problem
How to find out the currently running version of Solr- How do I find out version of currently running Solr?
Win10 多种方式解决无法安装.Net3.5的问题
Unity learns from spaceshooter to record the difference between fixedupdate and update in unity for the second time
Assets, vulnerabilities, threats and events of the four elements of safe operation
[AUTOSAR five methodology]
【AutoSAR 十 IO架构】
FPGA - 7系列 FPGA内部结构之Clocking -04- 多区域时钟
cordova-plugin-device获取设备信息插件导致华为审核不通过