1、异步任务

​ 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题。

@EnableAysnc、@Aysnc

/**
* @Author: jiatp
* Description:测试异步任务
*/ @Service
public class AsyncService { //告诉springboot这是一个异步任务
@Async
public void hello(){
try {
Thread.sleep(3000);
} catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("处理数据中.....");
}
}

测试:

@RestController
public class AsyncController {
@Autowired
AsyncService asyncService; @GetMapping("/hello")
public String hello(){
asyncService.hello();
return "success";
}
}

2、定时任务

​ 项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor 、TaskScheduler 接口

两个注解:@EnableScheduling、@Scheduled

cron表达式:

字段 允许值 允许的特殊字符
0-59 , - * /
0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 , - * /
星期 0-7或SUN-SAT 0,7是SUN , - * ? / L C #

特殊字符说明:

特殊字符 代表含义
, 枚举
- 区间
* 任意
/ 步长
? 日/星期冲突匹配
L 最后
W 工作日
C 和calendar联系后计算过的值
# 星期,4#2,第2个星期四

service:

@Service
public class ScheduledService { /**cron表达式
* second, minute, hour, day of month, month, and day of week.
* 举例:0 * * * * MON-FRI
* */
//@Scheduled(cron = "* * * * * MON-SAT")//周1-6每一月一天一小时一分钟一份秒运行
// @Scheduled(cron = " * * * * MON-SAT")//区间
//@Scheduled(cron = "0/4 * * * * MON-SAT")
@Scheduled(cron = "0,1,2,3,4,5 * * * * MON-SAT")//枚举
public void hell0(){
System.out.println("hello...定时任务");
}
}

这里只给出例子,其余的自行测试;

3、邮件任务

导入依赖

 <!--邮件任务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

application.properties配置

spring.mail.username=XXXXXXXX@qq.com
spring.mail.password=epkjwhqabfnzbhbb
spring.mail.host=smtp.qq.com
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

注意这里:

这里要开启smtp服务,点生成授权码,获取连接密码,将密码写在application.properties中

测试

@SpringBootTest
class Springboot04TaskApplicationTests { @Autowired
JavaMailSenderImpl mailSender; //简单邮件发送
@Test
void contextLoads() {
SimpleMailMessage msg = new SimpleMailMessage();
//邮件信息
msg.setSubject("通知!通知!通知!");
msg.setText("我不吃了我不吃了!");
msg.setTo("jatpeo@163.com");
msg.setFrom("393287859@qq.com");
mailSender.send(msg);
System.out.println("发送成功!");
} //复杂的邮件发送
@Test
void test02() throws Exception{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
helper.setSubject("官宣!");
helper.setText("<h1 style='color:blue'>嘻嘻嘻嘻嘻嘻</h1>",true);//支持html的形式
helper.setTo("xxxxxxx@qq.com");
helper.setFrom("393287859@qq.com"); //发送两个图片
helper.addAttachment("1.jpg",new File("C:\\Users\\Administrator\\Pictures\\002.jpg"));
helper.addAttachment("2.jpg",new File("C:\\Users\\Administrator\\Pictures\\162538-15586863381bcc.jpg")); mailSender.send(mimeMessage);
System.out.println("发送成功!");
}

其余的测试请查看官方文档。

4.1_springboot2.2任务之异步、定时、邮件任务的更多相关文章

  1. Celery 异步定时周期任务

    1/什么是Celery Celery 是基于Python实现的模块,用于执行异步定时周期任务的 其结构的组成是由 1.用户任务app 2.管道 broker 用于存储任务 官方推荐 redis rab ...

  2. Elasticsearch索引增量统计及定时邮件实现

    0.需求 随着ELKStack在应用系统中的数据规模的急剧增长,每天千万级别数据量(存储大小:10000000*10k/1024/1024=95.37GB,假设单条数据10kB,实际远大于10KB)的 ...

  3. django、celery异步发邮件

    django.celery异步发邮件 django自带的send_mail发邮件功能执行发邮件功能会因为网络的原因造成花费的时间过长,为了解决这个问题,可以用celery + redis代替 安装包: ...

  4. Spring Boot任务(定时,异步,邮件)

    一.定时任务 开启定时任务(在Spring Boot项目主程序上添加如下注解) @EnableScheduling //开启定时任务的注解 创建定时任务(创建一个Service如下) @Service ...

  5. 【java框架】SpringBoot(4)--SpringBoot实现异步、邮件、定时任务

    1.SpringBoot整合任务机制 1.1.SpringBoot实现异步方法 日常开发中涉及很多界面与后端的交互响应,都不是同步的,基于SpringBoot为我们提供了注解方式实现异步方法.使得前端 ...

  6. SpringBoot-异步定时-邮件任务

    目录 背景 异步任务 定时任务 邮件任务 背景 在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件, 后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功, 所以我们 ...

  7. Java系列--第八篇 基于Maven的SSME之定时邮件发送

    关于ssme这个我的小示例项目,想做到麻雀虽小,五脏俱全,看到很多一些web都有定时发送邮件的功能,想我ssme也加入一下这种功能,经查询相关文档,发现spring本身自带了一个调度器quartz,下 ...

  8. Node.js定时邮件的那些事儿

    近开发一个项目,需要在Node.js程序里实现定期给管理员发邮件的功能. 笔者平时只会在Web界面收发邮件.对邮件的原理完全不懂(可能大学教过,然而全忘了),直到要解决这个问题.请教了几个业务的同事, ...

  9. SpringBoot 异步 定时任务 邮件

    springboot异步 一: 在 MyConfiguration.java 中开启注解 @Configuration//指明当前类是一个配置类:就是来替代之前的Spring配置文件@EnableAs ...

随机推荐

  1. 关于RF中元素定位问题

    今天碰到一个定位元素的问题,用CLASS定位. 调试后是这样的情况: 显示定位正确,字体被覆盖了.完了,在RF中跑脚本的时候,报错,说没有找到元素 . 郁闷,各种试,还是没有定位到. 最好问前端,教我 ...

  2. Java-Class-@I:javax.annotation.PostConstruct

    ylbtech-Java-Class-@I:javax.annotation.PostConstruct 1.返回顶部   2.返回顶部 1.1. package com.ylbtech.api.pl ...

  3. git clone慢的解决办法

    转自:http://www.kindemh.cn/ 转自Kindem的博客 问题 大家可能都遇到过从github使用git clone指令奇慢无比的问题,网上很多人说使用代理来加速git,但是这也不是 ...

  4. Yslow压力测试

    1.yslow介绍 概述:YSlow是Yahoo发布的一款插件,可安装在Firefox或Chrome上,这个插件可以分析网站的页面,并告诉你为了提高网站性能,如何基于某些规则而进行优化. 2.安装方法 ...

  5. 剑指offer第二版面试题11:旋转数组的最小数字(JAVA版)

    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数 ...

  6. UVA 10242 Fourth Point

    题意:给你平行四边形两条边的顶点,让你求第四个点. 思路:要找到俩边的公共点,然后向量运算. AC代码: #include<cstdio> #include<cmath> #i ...

  7. C# WinfForm 控件之dev报表 XtraReport(三) 动态数据绑定

    代码还用上一节的,把reportFrx的dataSource去掉.各cell绑定的字段也去掉,有了第二节的基础,现在看这个ms就不难了 无非就是 传到reportFrx一个数据集 在把这个数据集 绑到 ...

  8. 用JS获取地址栏参数的方法(转)

    方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) {      var reg = new RegExp("( ...

  9. 9-MySQL-Ubuntu-数据表中数据的修改(二)

    数据的修改(update) (1)修改整个字段: update 表名 set 字段1=值1,字段2=值2; (2)修改字段部分数据 update 表名 set 字段1=值1,字段2=值2,... wh ...

  10. springboot中引用配置文件中的参数

    首先可以看到这是做微信登陆时候的配置,一般不会写死都是通过配置文件获取,所以,记载配置文件中 那么怎么引用呢: 可以看到直接注入的方式就可以引用了,所以看下面: 进行页面跳转,并且带有参数的, 使用m ...