当前位置 博文首页 > 好好学习天天向上:SpringBoot与任务

    好好学习天天向上:SpringBoot与任务

    作者:[db:作者] 时间:2021-07-15 21:55

    SpringBoot与任务

    一.异步任务

    1、设置注解生效

    @SpringBootApplication
    @EnableAsync
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    2、Server异步任务注解@Async

    不需要进行同步等待

        @Async
        public void hello() {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("数据处理中");
        }
    

    二.定时任务

    1、开启定时任务

    @EnableScheduling
    @SpringBootApplication
    public class DemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    2、Server定时任务注解:@Scheduled

    package com.example.demo.service;
    
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    
    @Service
    public class ScheduledService {
        /**
         * second秒,minute分,hour时,day of month日,month月,day of week周几
         */
        @Scheduled(cron = "0 * * * * MON-FRI")
        public  void sayYes(){
            System.out.println("yes");
        }
    }
    
    

    3、Cron表达式

    Cron表达式的详细用法

    三.邮件任务

    1、引入依赖

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

    2、配置

    SpringBoot会自动配置MailSenderAutoConfiguration
    需要手动定义MailProperties内容

    #邮箱地址
    spring.mail.username=xxxx@qq.com
    #授权码
    spring.mail.password=xxxx
    spring.mail.host=smtp.qq.com
    spring.mail.properties.mail.smtp.ssl.enable=true
    

    授权码生成
    在这里插入图片描述

    3、遇到问题:502报错

    错误原因,读取配置文件中的邮箱地址错误,需要在代码中指定发送方邮箱地址,配置文件中的也不能删除或注释掉。

    4、代码

    1.简单邮件

    package test.com.example.demo;
    
    import com.example.demo.DemoApplication;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSenderImpl;
    import org.springframework.test.context.junit4.SpringRunner;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = DemoApplication.class)
    public class DemoApplicationTest {
        @Autowired
        JavaMailSenderImpl javaMailSender;
    
        @Test
        public void sendMail() {
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            simpleMailMessage.setSubject("通知");
            simpleMailMessage.setText("wozaiceshiyouxiang");
            simpleMailMessage.setTo("xxxx@qq.com");
            simpleMailMessage.setFrom("xxxx@qq.com");
    
            javaMailSender.send(simpleMailMessage);
        }
    }
    
    

    2.稍微复杂邮件

    还可以上传文件,发送邮件给多个人,此处只有简单案例

        @Test
        public void sendMail2() {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            try {
                MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
                mimeMessageHelper.setFrom("xxxx@qq.com");
                mimeMessageHelper.setText("我在做测试");
                mimeMessageHelper.setTo("xxxx@qq.com");
            } catch (MessagingException e) {
                e.printStackTrace();
            }
             javaMailSender.send(mimeMessage);
        }
    
    cs