前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot中的常用任务

springboot中的常用任务

作者头像
冷环渊
发布2021-11-15 15:55:08
5560
发布2021-11-15 15:55:08
举报

springboot中的常用任务

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

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

异步任务

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

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

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

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

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

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

代码示例

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

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

控制层

@RestController
public class AsyncController {
    @Autowired
    AsyncService 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邮箱开启服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rG0kjFBM-1636792037796)(SpringBoot.assets/image-20210720230503628.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rG0kjFBM-1636792037796)(SpringBoot.assets/image-20210720230503628.png)]

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所以我们可以拿来使用

    @Autowired
    javaMailSenderImpl sender;
简单的邮件发送
@SpringBootTest
class Spring8TestApplicationTests {
    @Autowired
    javaMailSenderImpl sender;
    @Test
    void 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,

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

    @Test
    void contextLoads1() throws MessagingException {
        //复杂的邮件的发送
        MimeMessage mimeMessage = sender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
        helper.setSubject("hyc-plus");
        helper.setText("你好",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 {
    @Autowired
    private 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常用的三中任务的使用和示例代码了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • springboot中的常用任务
    • 异步任务
      • 定时任务
        • cron表达式
      • 邮件任务
        • 邮件发送工具类
    相关产品与服务
    验证码
    腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档