【SpringBoot1.x】SpringBoot1.x 任务
SpringBoot1.x 任务
异步任务
在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的。但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用
多线程来完成此类任务,其实,在 Spring 3.x 之后,就已经内置了 @Async 来完美解决这个问题。
AsyncService.java
/**
* @Author : parzulpan
* @Time : 2021-01
* @Desc :
*/ @Service
public class AsyncService { @Async // 告诉 Spring 这是一个异步方法
public void hello() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据处理中");
}
}
AsyncController.java
/**
* @Author : parzulpan
* @Time : 2021-01
* @Desc :
*/ @Service
public class AsyncService { @Async // 告诉 Spring 这是一个异步方法
public void hello() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据处理中");
}
}
主配置类开启异步注解支持
@EnableAsync // 开启异步注解支持
@SpringBootApplication
public class IntegrationTaskApplication {}
定时任务
项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。Spring 为我们提供了异步执行任务调度的方式,提供
TaskExecutor、TaskScheduler 接口。
ScheduleService.java
/**
* @Author : parzulpan
* @Time : 2021-01
* @Desc :
*/ @Service
public class ScheduleService { /**
* cron 表达式
*
* second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几).
* 示例:0 * * * * 0-6 代表从周日到周六,每分钟的第0秒执行
*
* 常用:
* 【0 0/5 14,18 * * ?】 每天 14 点整,和 18 点整,每隔 5 分钟执行一次
* 【0 15 10 ? * 1-6】 每个月的周一至周六 10:15 执行一次
* 【0 0 2 ? * 6L】 每个月的最后一个周六凌晨 2:00 执行一次
* 【0 0 2 LW * ?】 每个月的最后一个工作日凌晨 2:00 执行一次
* 【0 0 2-4 ? * 1#1】 每个月的第一个周一凌晨2:00 到 4:00期间,每个整点都执行一次;
*/
// @Scheduled(cron = "0 * * * * 0-6")
// @Scheduled(cron = "0,1,2,3,4 * * * * 0-6")
// @Scheduled(cron = "0-4 * * * * 0-6")
@Scheduled(cron = "0/4 * * * * 0-6") // 每 4 秒执行一次
public void runHello() {
System.out.println("runHello...");
}
}
主配置类开启定时任务注解支持
@EnableScheduling // 开启定时任务注解支持
@EnableAsync // 开启异步注解支持
@SpringBootApplication
public class IntegrationTaskApplication {}
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个星期四
邮件任务
邮件发送需要引入 spring-boot-starter-mail,SpringBoot 自动配置 MailSenderAutoConfiguration,然后定义 MailProperties 内容,配置在配置文件中,IOC 容器会自动装配 JavaMailSender。
加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
编辑配置文件
spring:
mail:
username: 1129768687@qq.com
password: wiacrbulowhhgagh # 使用授权码
host: smtp.qq.com
# properties:
# mail.smtp.ssl.enable: true # 开启 smtp 服务器
编写测试文件
@RunWith(SpringRunner.class)
@SpringBootTest
public class IntegrationTaskApplicationTests { @Autowired
JavaMailSenderImpl javaMailSender; @Test
public void sendSimpleMail() {
// 定义一个简单邮件消息
SimpleMailMessage message = new SimpleMailMessage(); // 邮件设置
message.setSubject("通知-明天放假"); // 标题
message.setText("2020年元旦节放假一天~"); // 内容
message.setTo(new String[]{"parzulpan@163.com", "parzulpan@gmail.com"});
message.setFrom("1129768687@qq.com"); // 发送
javaMailSender.send(message);
} @Test
public void sendMimeMail() throws MessagingException {
// 定义一个复杂邮件消息
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true); // 邮件设置
helper.setSubject("通知-后天放假");
helper.setText("<b style='color:red'> 2020年元旦节放假三天~ </b>", true);
helper.setTo(new String[]{"parzulpan@163.com", "parzulpan@gmail.com"});
helper.setFrom("1129768687@qq.com"); // 上传附件
helper.addAttachment("hello.java", new File("src/main/resources/static/hello.java"));
helper.addAttachment("猫.png", new File("src/main/resources/static/猫.png")); javaMailSender.send(message);
}
}
练习和总结
【SpringBoot1.x】SpringBoot1.x 任务的更多相关文章
- 记 SpringBoot1.* 转 Springoot2.0 遇到的问题
1.拦截器问题 到2.0之后在配置文件中写 static-path-pattern: /static/** 已经不起作用(2.0需要在方法中配置) SpringBoot1.*写法 @Configura ...
- SpringBoot1.x与监控(六)
由于2.x和1.x的监控不一样,此处先讲1.x 一 SpringBoot1.x监控 pom.xml <dependency> <groupId>org.springframew ...
- SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制
SpringBoot1.x升级SpringBoot2.x踩坑之文件上传大小限制 前言 LZ最近升级SpringBoo框架到2.1.6,踩了一些坑,这里介绍的是文件上传大小限制. 升级前 #文件上传配置 ...
- 使用SpringBoot1.4.0的一个坑
时隔半年,再次使用Spring Boot快速搭建微服务,半年前使用的版本是1.2.5,如今看官网最新的release版本是1.4.0,那就用最新的来构建,由于部署环境可能有多套所以使用maven-fi ...
- springboot1.5和jpa利用HikariCP实现多数据源的使用
背景 现在已有一个完整的项目,需要引入一个新的数据源,其实也就是分一些请求到从库上去 技术栈 springboot1.5 (哎,升不动啊) 思路 两个数据源,其中一个设置为主数据源 两个事物管理器,其 ...
- 【SpringBoot1.x】SpringBoot1.x 开发热部署和监控管理
SpringBoot1.x 开发热部署和监控管理 热部署 在开发中我们修改一个 Java 文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署). ...
- 【SpringBoot1.x】SpringBoot1.x 分布式
SpringBoot1.x 分布式 分布式应用 Zookeeper&Dubbo ZooKeeper 是用于分布式应用程序的高性能协调服务.它在一个简单的界面中公开了常见的服务,例如命名,配置管 ...
- 【SpringBoot1.x】SpringBoot1.x 安全
SpringBoot1.x 安全 文章源码 环境搭建 SpringSecurity 是针对 Spring 项目的安全框架,也是 SpringBoot 底层安全模块默认的技术选型.他可以实现强大的 we ...
- 【SpringBoot1.x】SpringBoot1.x 检索
SpringBoot1.x 检索 文章源码 概念 Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticse ...
随机推荐
- TMOOC-1709-小明复仇
题目描述 小明所在的世界上一共有n个城市,城市间有m条双向道路.小明现在在城市1,他想到位于城市n的小韩隆家询问他为什么没有将自己的五三复原完成.由于小韩隆手下有许多小弟,小明担心自己可能再也回不来, ...
- spark中map和mapPartitions算子的区别
区别: 1.map是对rdd中每一个元素进行操作 2.mapPartitions是对rdd中每个partition的迭代器进行操作 mapPartitions优点: 1.若是普通map,比如一个par ...
- springboot中使用h2数据库(内存模式)
使用H2的优点,不需要装有服务端和客户端,在项目中包含一个jar即可,加上初始化的SQL就可以使用数据库了 在springboot中引入,我的版本是2.1.4,里面就包含有h2的版本控制 <!- ...
- MBR分区表为什么最大只能识别2TB硬盘容量
1. 前言 最近公司的服务器硬盘坏了,需要换一个新的硬盘,容量是2TB,用的fdisk进行分区,期间搜索分区工具,看到了关于MBR(Master Boot Record)与GPT(GUID parti ...
- 容器编排系统之Pod生命周期、健康/就绪状态探测以及资源限制
前文我们了解了在k8s上的资源标签.标签选择器以及资源注解相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14141080.html:今天我们来聊下k8 ...
- Redis缓存穿透和缓存雪崩的面试题解析
前段时间去摩拜面试,然后,做笔试的时候,遇到了几道Redis面试题目,今天来做个总结.捋一下思路,顺便温习一下之前的知识,如果对您有帮助,左上角点下关注 ! 谢谢 文章目录 缓存穿透 缓存雪崩 大家都 ...
- 前方高能!看Python程序员是表白的
一.️爱心墙️ 通过爬虫搜集到粉丝的头像,然后利用PIL库拼接出爱心墙的形状: 二.代码分析 1.头像爬取 在个人中心点击我的粉丝便可以看到自己的粉丝,通过抓包可知对应的接口为: url = 'htt ...
- Python 中日期函数
导入日期库 datetime import datetime # 或者from datetime import datetime ,date 字符串转datetime
- 百度Echarts中国地图经纬度
百度显示中国地图的地址 https://www.makeapie.com/explore.html#sort=rank~timeframe=all~author=all%3Ftdsourcetag v ...
- 基于LNMP架构搭建wordpress博客之安装架构说明
架构情况 架构情况:基于LNMP架构搭建wordpress系统 软件包版本说明: 系统要求 : CentOS-6.9-x86_64-bin-DVD1.iso PHP版本 : php-7.2.29 ...