异步任务、邮箱任务、定时任务

异步任务

首先是我们要先在主程序上开启异步

@EnableAsync

同理我们要在某个地方添加

@Aync

service

@Service
@Async
public class AsyncService {
    public void as()  {
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据正在处理");
    }
    }

controller
这样我们在访问/hello路径的时候就不会有三秒的延迟效果

@RestController
public class AsyncController {
    @Resource
    private AsyncService asyncService;
    @RequestMapping("/hello")
    public String as(){
        asyncService.as();
        return "ok";
    }
}

邮箱任务

pom

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

application.yml

spring:
  mail:
    username: 邮箱
    password: 授权码
    host: smtp.qq.com #这里使用的是qq服务器
    port: 465 # 端口号
    properties:
      mail:
        smtp:
          ssl:
            enable: true  # 开启安全连接

核心类

@Autowired
    private JavaMailSender mailSender;//此类是java的核心类
    @Test  //简单邮箱的发送
    void contextLoads() {
        SimpleMailMessage mailMessage = new SimpleMailMessage();// 创建一个简单的邮箱
        mailMessage.setSubject("设置主题");
        mailMessage.setText("你好,正文");
        mailMessage.setFrom("2331890842@qq.com");
        mailMessage.setTo("2331890842@qq.com");
        mailSender.send(mailMessage);
    }
    @Test //复杂邮箱的发送 就是带有附件的邮箱
    void   send() throws MessagingException {
        MimeMessage mimeMessage = mailSender.createMimeMessage();//先创建一个邮箱信心
        //创建一个帮助类 将创建好的邮箱模板传入 开启负载模式 设置编码
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true,"utf-8");
            mimeMessageHelper.setSubject("设置主题");
            //添加附件 有多种形式 这里是直接使用文件的形式创建
            mimeMessageHelper.setText("正文");mimeMessageHelper.addAttachment("chameleon.jpg",new File("C:\\Users\\quxianwei\\Desktop\\chameleon.jpg"));
        mimeMessageHelper.setFrom("2331890842@qq.com");
        mimeMessageHelper.setTo("2331890842@qq.com");
        mailSender.send(mimeMessage);
    }

定时任务

同样首先是开启定时任务

@EnableScheduling

同样他也会有一个

@Scheduling

我们在service层进行演示,通过注解进入源码我们可以看出核心是cron的一种表达式,我们还可以使用一些其他的属性来代替。

@Scheduled(cron = "0/3 * * * * ?")//每三秒执行一次
    public void asd(){
        System.out.println("当前执行的时间"+new Date());
    }

cron表达式的规则

在线生成规则
在这里插入图片描述
特殊字符
在这里插入图片描述
取值示例
在这里插入图片描述
如果当我们设置多个定时任务他可能会出现异步的问题,这样我们就需要开启异步注解,这样他们才不会因为异步而导致时差让定时任务不能准确执行。

@Service
@Async
public class AsyncService {
@Scheduled(cron = "0/3 * * * * ?")//每三秒执行一次
    public void asd(){
        System.out.println("当前执行的时间"+new Date());
    }
    @Scheduled(cron = "30,40 54,56 * * * ?")//分别在54,56分的30,40秒执行一次
    public void asd1(){
        System.out.println("54分执行开始"+new Date());
    }
    @Scheduled(cron = "0 13-15 9 * * ?") //在每天9. 13-15之间每一分钟执行一次
    public void asd2(){
        System.out.println("13-15分执行开始"+new Date());
    }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值