前言

给大家推荐一个知识交流社区
哪吒社区
在这里新手小白可以得到十分有力度技术依靠,
进阶的小伙伴可以在大佬的文章中得到提升
学习较深的大佬们可以互相讨论技术的心得

springboot中的常用任务

今天给大家分析一些springboot中常用的任务如:

  • 异步啊
  • 邮件发送
  • 定时任务

异步任务

为什么我们需要异步的任务?

比如:前端请求了一些耗时任务,一时间处理不完一直转圈圈的不到响应,体验就会十分的不好。
我们需要将收到请求在处理的结果返回给前端,处理的过程开辟线程执行,不影响用户做其他操作

在 Spring Boot 中,我们不需要手动创建线程异步执行耗时任务,因为 Spring 框架已提供了相关异步任务执行解决方案

小案例:我如何解决假如我访问了一个hello页面,页面调用的方法是睡眠3秒,再返回ok,那么再前端页面我就要等待空白页面3秒钟。如何解决?

Springboot中有一个注解叫@async异步任务

我们要使用他需要在主启动类开启注解支持@enableasync

代码示例

@Service
public class AsyncService {@Asyncpublic void hello(){try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("您好");}
}

这段代码会让执行方法的时候网页加载三秒。

控制层

@RestController
public class AsyncController {@AutowiredAsyncService asyncService;@RequestMapping("/hello")public String hello(){asyncService.hello();return "ok";}
}

我们访问hello这个请求,就会等待三秒,之后页面返回ok,

执行顺序是:

​ 发起请求-----》执行方法—》等三秒—》返回ok

我们启动了异步任务,并且将等待方法上加入注解@Aynsc

再次启动的时候,顺序就变成了这样
发起请求-----》执行方法—》等三秒(同时)—》等待完毕
------------------------------- —》返回ok(同时)

定时任务

学习定时任务之前,我们需要了解两个函数接口和两个注解

第一个接口:TaskExecutor // 任务执行者
第二个接口:TaskScheduler// 任务调度者注解
@EnableScheduling//开启定时任务功能注解
@Scheduled

使用定时任务首先我们要在主启动类上添加注解开启定时任务:

@EnableScheduling//开启定时任务功能注解

之后就可以通过@Scheduled来设置cron表达式实现定时任务了

cron表达式

​ 计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在Linux中,我们经常用到 cron 服务器来完成这项工作。cron服务器可以根据配置文件约定的时间来执行特定的任务。

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
按顺序依次为

秒(0~59)
分钟(0~59)
小时(0~23)
天(月)(0~31,但是你需要考虑你月的天数)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
年份(1970-2099)

字段 允许值 允许的特殊字符

秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /

PS:

  1. ?只能用在日期和星期,月上
  2. 在使用“L”参数时,不要指定列表或范围,因为这会导致问题

测试小例子:

@Service
public class ScheduledService {//需求:在一定的时间执行这个方法 方法千百种//cron表达式@Scheduled(cron = "0 14 10 * * ?")public void hello(){System.out.println("你被执行了");}
}

我想在每天的10点14分的时候,打印你被执行了,

邮件任务

最常见的就是邮箱验证了,我们可以通过邮箱都方式发送验证码,或者是一些需要推送到文件

首先要去qq邮箱开启服务

spring配置文件中的邮件配置

spring.mail.username=3132774018@qq.com
spring.mail.password=xxxx你获得的密码
spring.mail.host= smtp.qq.com
#开启加密验证
spring.mail.properties.mail.stmp.ssl.enable=true

spring中关于邮件的实现类:javaMailSenderImpl

他是一个bean所以我们可以拿来使用

    @AutowiredjavaMailSenderImpl sender;

简单的邮件发送

@SpringBootTest
class Spring8TestApplicationTests {@AutowiredjavaMailSenderImpl sender;@Testvoid contextLoads() {//一个简单的邮件的发送SimpleMailMessage message = new SimpleMailMessage();//标题message.setSubject("你好啊,hyc组内的成员,看到这条消息的时候 hyc还在为了大厂努力");//内容message.setText("冲进大厂没有什么是不可以的,好好努力,一切都在掌握之中");//发送给谁message.setTo("2549273958@qq.com");//谁来发送message.setFrom("3132774018@qq.com");sender.send(message);}}

复杂邮件,带有附件,html,

我们这里使用sender.createMimeMessage的方式来创建复杂的邮件发送对象

springboot给我们提供了一个帮助类,MimeMessageHelper我们用这个helper对象来操作MImeMessage,

就可以完成复杂邮件发送了

    @Testvoid contextLoads1() throws MessagingException {//复杂的邮件的发送MimeMessage mimeMessage = sender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);helper.setSubject("hyc-plus");helper.setText("<p style='color:red'>你好</p>",true);//附件helper.addAttachment("1.jpg",new File("D:\\java工程师\\SpringBoot\\spring-8-test\\src\\main\\resources\\public\\1600837482167.jpg"));//发送给谁helper.setTo("3132774018@qq.com");//谁来发送helper.setFrom("3132774018@qq.com");sender.send(mimeMessage);}

邮件发送工具类

话不多说都在码里面了

MailsenderUtils:

@Component
public class MailsenderUtils {@Autowiredprivate javaMailSenderImpl mailSender;/**** @param subject :邮件标题* @param text 邮件内容* @param html  是否开启html,* @param to     发送给谁* @param from    谁来发送* @param filename  附件名字* @param acc       附件路径* @return* 1 :发送成功* -1:发送失败*/public  int MailsenderbyHyc(String subject, String text, boolean html, String to, String from,String filename, File acc){//复杂的邮件的发送MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = null;try {helper = new MimeMessageHelper(mimeMessage,true);helper.setSubject(subject);helper.setText(text,html);//附件helper.addAttachment(filename,acc);//发送给谁helper.setTo(to);//谁来发送helper.setFrom(from);mailSender.send(mimeMessage);return 1;} catch (MessagingException e) {e.printStackTrace();return -1;}}}

以上就是这次给大家分享的 springboot常用的三中任务的使用和示例代码了

哪吒社区Java技能树|springboot中的常用任务相关推荐

  1. 【哪吒社区Java技能树 打卡day2】Java学习路线总结(思维导图篇)

    跟着哪吒学Java,告别CRUD,搬砖工逆袭Java架构师,燥起来! Java入门级概述 一.Java成名史 想要学好一门语言,一定要了解它的历史,了解它存在的价值和意义. 1991年成立了一个称为G ...

  2. springboot中得注解_Spring以及SpringBoot中的常用的注解小结

    一.注解的基本概念 Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法.Annotion(注解)是一个接口,程序可以通过反射来获 ...

  3. springboot yml怎么建常量_【Java】SpringBoot 中从application.yml中获取自定义常量

    由于这里我想通过java连接linux,connection连接需要host.port.username.password及其他路径等等.不想每次修改的时候都去改源文件,所以想写在applicatio ...

  4. JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介

    JDK提供了大量优秀的集合实现供开发者使用,合格的程序员必须要能够通过功能场景和性能需求选用最合适的集合,这就要求开发者必须熟悉Java的常用集合类.本文将就Java Collections Fram ...

  5. SpringBoot中Logback常用配置以及自定义输出到MySql数据库

    之前基于SpringBoot开发的项目运行一段时间后,客户使用网站偶尔会出现接口调用失败的情况,每次产品经理询问是怎么回事的时候,都需要让运维提下最近的日志才能分析具体原因,这样时效性和便利性不能满足 ...

  6. Java软件开发中,常用的工具有哪些?

    学习Java知识点不足以用于实践.想要操作,需要知道Java开发工具有哪些.掌握Java开发工具的使用,才能熟练地写出代码编程.可说,没有得心应手的工具,想要做好Java开发,就有了一定的难度,所以今 ...

  7. 【华为OD机试真题 JAVA】算法中的常用知识点

    为大家准备了算法中常用的一些重要知识点 String 字符串         IndexOf():返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这                     ...

  8. java.lang包中的常用类

    java.lang包 java.lang.Boolean类 java.lang.Byte类 java.lang.Character java.lang.Character.Subset类 java.l ...

  9. Java和Android中一些常用的公共方法

    /**   * 通过findStr在getStr的位置,查找相应位置上setStr的值   *   * @param getStr   *            所在位置   * @param set ...

最新文章

  1. 彻底卸载 RAD Studio 2009/2010/XE+ 的步骤
  2. 使用Git上传项目到码云仓库
  3. 百度启动高管退休计划,总裁张亚勤今年十月退休
  4. 比较MongoDB在公有云上的性能:AWS、Azure和Digital Ocean
  5. 移除VS解决方案和TFS服务器的关系
  6. Java面向对象之USB接口实例
  7. 【jQuery】用jQuery给文本框添加只读属性【readOnly】
  8. 【转】C# 正则表达式 使用介绍
  9. spring-注入array集合
  10. 分支管理---分支管理策略
  11. ESL:我们如何使用首云混合云产品实现提效降本
  12. 带你自学Python系列(十六):Python中类的用法(二)
  13. python深度学习库系列教程——python调用opencv库教程
  14. 手动编译包含两个import自写类的java类。
  15. 驱动人生官网服务器维护,驱动人生在线检测服务 驱动检测更新更加方便
  16. 计算机质保试题及答案,质量体系、国军标体系试卷(质保部出)
  17. 怎么下载思维导图模板呢?
  18. DragonBones(龙骨动画)在Unity端的使用
  19. 个人电脑php漏洞怎么修复,PHP版 6.0 漏洞 要怎么修复
  20. 清华计算机录取通知书,清华送出第一批录取通知书,这些被刷屏的学霸,有怎样的成长密码...

热门文章

  1. PAT乙级练习题1019 数字黑洞
  2. 2022 Jiangsu Collegiate Programming Contest - J. Balanced Tree
  3. foss测试_印度最大的针对语言技术的FOSS活动
  4. 蓝桥杯.蚂蚁感冒(模拟)
  5. Swagger 源码解析
  6. oracle数据库相关知识点,Oracle数据库小知识点整理
  7. 如何搭建一个完整的交易框架
  8. 【python】给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列。
  9. Maxthon显示界面问题
  10. 谈一谈ERP行业的服务模式