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. linux find相关 (持续更新中)

    按名字查找 find . -name *.txt find . -name test* # . 指的是当前路径, 查找全局的话把. 换成/ 查找并删除多个文件 find -type f -name & ...

  2. 人人开源打包jar

    先在renren-security执行mvn clean install 再到renren-admin目录下,执行mvn clean package,就可以打成renren-admin.jar 如果想 ...

  3. Dockerfile的实践2

    Dockerfile的文件 FROM ubuntu RUN apt-get update && apt-get install -y stress ENTRYPOINT [" ...

  4. 从零开始 Code Review,两年实战经验分享!

    作者:wenhx http://www.cnblogs.com/wenhx/p/5641766.html 前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展 Cod ...

  5. Spring Boot配置随机数

    Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位MD5字符串 user.random.secret=${r ...

  6. python语言和R语言实现机器学习算法

    <转>机器学习系列(9)_机器学习算法一览(附Python和R代码)   转自http://blog.csdn.net/han_xiaoyang/article/details/51191 ...

  7. echart 柱状图背景色设置

    方法一: series: [ { name: '1', type: 'bar', itemStyle: {//柱图背景色 color: '#111' }, data: list }, { name: ...

  8. apache + php 无法访问redis

    1.在有扩展的情况下 2.测试连接 <?php $redis=new Redis(); $redis->connect('127.0.0.1',6379); echo "succ ...

  9. vue组件的调用方式

    vue中一般都会把公共内容作为一个组件去布局,但是如何引用自定义的组件呢?下面就是vue调用自定义组件的方式,主要代码如下: <template> <div> <span ...

  10. Codeforces Round #563 (Div. 2) E. Ehab and the Expected GCD Problem

    https://codeforces.com/contest/1174/problem/E dp 好题 *(if 满足条件) 满足条件 *1 不满足条件 *0 ///这代码虽然写着方便,但是常数有点大 ...