SpringBoot与任务

任务:
一、异步任务
二、定时任务
三、邮件任务


源码


一、异步任务

1.创建项目

  • 用spring初始化器创建

fc6dd26beddc840698025202664b74f1.png

310e67b17e35f20ef18215b749eea027.png

2.异步任务的解析

异步任务在开发中还是非常常见的
比如我们要发送邮件或者是处理数据,不想阻塞下面的线程,我们就可以用多线程的方式来进行异步处理

①先看同步处理的效果

(1)在主程序相同的目录下创建一个service包,建立AsyncService类
@Service
public class AsyncService {
    public void hello(){
        try {//模拟同步处理数据消耗3秒
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("处理数据中......");
    }
}
(2)在主程序相同的目录下创建一个controller包,建立AsyncController类
@RestController
public class AsyncController {

    @Autowired
    AsyncService asyncService;

    @GetMapping("/hello")
    public String hello(){
        asyncService.hello();
        return "success";
    }
}
(3)测试
  • 启动项目,在浏览器输入http://localhost:8080/hello,可以看到,浏览器是3秒钟才响应了数据,加载处理success。

这样我们就能看到,同步处理太慢了,需要异步来加快速度

②异步的使用

(1)直接在需要异步的方法上加上@Async

95d92729336cc56d053087295b4901b4.png

加上@Async之后,spring就会自己开一个线程池,来进行调用

(2)在主程序上加上@EnableAysnc

e1f71075fb63b604e5c4c016ec413c9e.png

加上@EnableAysnc之后@Async才会起作用

(3)测试
  • 启动项目,在浏览器输入http://localhost:8080/hello,可以看到,浏览器立即响应了数据,加载处理success。

二、定时任务

常用场景:
每天凌晨收集和分析日志
每个月都有一天汇总生成报表

两个注解 :

  • @EnableScheduling
  • @ Scheduled

cron表达式:
28552f3748468df0cd5b99f2489250cd.png

e47712ede55168d8ec3f87c0c14865bd.png

//second, minute, hour, day of month(日), month, and day of week(周)
@Scheduled(cron = "0 * * * * MON-SAT")//周一到周六每分钟打印一次//@Scheduled(cron = "0,1,2,3,4 * * * * 
MON-SAT")//周一到周六每分钟的第1,2,3,4,5秒打印一次
@Scheduled(cron = "0-4 * * * * MON-SAT")//周一到周六每分钟的第1,2,3,4,5秒打印一次
@Scheduled(cron = "0/4 * * * * MON-SAT")//从1秒启动,每4秒执行一次
【0 0/5 14,18 * * ?】 每天14点整,和18点整,每隔5分钟执行一次 
【0 15 10 ? * 1-6】 每个月的周一至周六10:15分执行一次 
【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次 
【0 0 2 LW * ?】每个月的最后一个工作日凌晨2点执行一次 
【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;

1.应用

①在service包下创建一个ScheduleService类

@Service
public class ScheduleService {
    /**
     * second, minute, hour, day of month(日), month, and day of week(周).
     */
     //@Scheduled(cron = "0,1,2,3,4 * * * * MON-SAT")//周一到周六每分钟的第1,2,3,4,5秒打印一次
    @Scheduled(cron = "0 * * * * MON-SAT")//每分钟打印一次
    public void hello(){
        System.out.println("hello......");
    }
}

②在主程序中添加注解@EnableScheduling

③测试

  • 运行项目
  • 控制台会1分钟打印一次
    4b5c3f28244d416cafb3966bb50e5e59.png

三、邮件任务

0.提前准备

①获取授权码

在第三方登录QQ邮箱,可能存在邮件泄露风险,甚至危害Apple ID安全,建议使用QQ邮箱手机版登录。 继续获取授权码登录第三方客户端邮箱

就是:如果想要第三方登录邮箱的话,需要得到授权码

  • 我用qq邮箱演示,登录qq邮箱,点开设置-》账户,往下拉,点击生成授权码,只需要用绑定邮箱的手机按要求发消息即可

e126a34ae53b1f6038df425382c3c183.png

得到授权码之后,记录下来,用作之后的密码

1.引入场景启动器

  • 在pom文件中添加:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2.配置邮箱

  • 在全局配置文件中操作
spring.mail.username=2832466495@qq.com
spring.mail.password=授权码
spring.mail.host=smtp.qq.com

3.测试简单邮箱的发送

  • 在测试类中添加以下代码
    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    public void test01(){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        //邮件设置
        simpleMailMessage.setSubject("通知-今晚开会");
        simpleMailMessage.setText("今晚7:30开会");
        simpleMailMessage.setTo("2591871445@qq.com");
        simpleMailMessage.setFrom("2832466495@qq.com");
        mailSender.send(simpleMailMessage);
    }

09f7f43b8f867cfd4b454e103d773e5b.png
可以看到邮箱发送成功!!!

4.复杂邮件的发送

  • 在测试类中添加以下代码
    @Test
    public void test02() throws Exception{
        //复杂邮件
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
        //邮件设置
        mimeMessageHelper.setSubject("通知-今晚开会");
        mimeMessageHelper.setText("<b style='color:red'>今晚7:30开会</b>",true);
        mimeMessageHelper.setTo("2591871445@qq.com");
        mimeMessageHelper.setFrom("2832466495@qq.com");
        //上传文件
        mimeMessageHelper.addAttachment("1.jpg",new File("C:\\Users\\丹青\\Pictures\\Saved Pictures\\1F52G20Z0-5.jpg"));
        mimeMessageHelper.addAttachment("2.jpg",new File("C:\\Users\\丹青\\Pictures\\Saved Pictures\\1F52G20Z0-5.jpg"));
        mailSender.send(mimeMessage);
    }

d53cc396a631879a39d0a6ef1e19705e.png

可以看到发送完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值