SpringBoot异步、邮件发送、定时任务

异步任务

  1. 开启异步 @EnableAsync
@EnableAsync  //开启异步任务
@SpringBootApplication
public class SpringbootAsyncDemoApplication {
     
    public static void main(String[] args) {
     
      SpringApplication.run(SpringbootAsyncDemoApplication.class, args);
    }
}
  1. 标注需要异步执行的方法 @Async
@Service
public class AsyncService {
     
    @Async  //标注这是一个异步执行的方法
    public void hello() {
     
        try {
     
            Thread.sleep(5000);
            System.out.println("这是异步执行的函数");
        } catch (InterruptedException e) {
     
            e.printStackTrace();
        }
    }
}

邮件发送

邮件发送,在我们的日常开发中,也非常的多,Springboot也帮我们做了支持

  • 邮件发送需要引入spring-boot-start-mail

  • SpringBoot 自动配置MailSenderAutoConfiguration

  • 定义MailProperties内容,配置在application.yml中

  • 自动装配JavaMailSender

示例

  1. 引入依赖
<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-mailartifactId>
dependency>
  1. 配置相关信息
spring.mail.username=986707252@qq.com
spring.mail.password=你的授权密码
spring.mail.host=smtp.qq.com
# qq邮箱需要配置ssl
spring.mail.properties.mail.mail.smtp.ssl.enable=true

以上信息可以从邮箱设置中获取
SpringBoot异步、邮件发送、定时任务_第1张图片
3. 简单的代码示例

@SpringBootTest
class SpringbootAsyncDemoApplicationTests {
     

    @Autowired
    private JavaMailSenderImpl mailSender;

    @Test
    public void testMailSender1() {
     
        //发送简单邮件内容
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom("[email protected]");
        simpleMailMessage.setTo("[email protected]");
        simpleMailMessage.setText("你好呀,3413576768!");
        simpleMailMessage.setSubject("Java Mail 练习Demo");
        //发送邮件
        mailSender.send(simpleMailMessage);

    }

    @Test
    public void testMailSender2() throws MessagingException {
     
        //发送带附件邮件内容
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);

        mimeMessageHelper.setFrom("[email protected]");
        mimeMessageHelper.setTo("[email protected]");
        mimeMessageHelper.setText("你好呀,3413576768!");
        mimeMessageHelper.setSubject("Java Mail 练习Demo");
        //发送附件
        mimeMessageHelper.addAttachment("这是一张图片.jpg", new File("E://壁纸//316774.jpg"));
        mimeMessageHelper.addAttachment("这是一份word文档.doc",new File("C://Desktop//test.doc"));

        //发送邮件
        mailSender.send(mimeMessage);
    }
}

定时任务

两个主要接口

  • TaskExecutor接口
  • TaskScheduler接口

两个主要注解

  • @EnableScheduling
  • @Scheduled

cron表达式

字段 允许特殊字符
0~59 , - * /
0~59 , - * /
小时 0~23 , - * /
日期 1~31 , - * / ? L W C
月份 1~12 , - * /
星期 0~7 或者 SUN ~ SAT (其中0和7都是星期日) , - * / ? L W C

特殊字符含义:

特殊字符 含义
枚举
- 区间
* 任意
/ 步长
? 日或星期中的冲突匹配
L 最后的
W 工作日
C 和calendar联系计算过的值
# 星期,4#2表示第2个星期三

常见的cron表达式

0/2 * * * * ?   表示每2秒 执行任务
0 0/2 * * * ?    表示每2分钟 执行任务
0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务
0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业
0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作
0 0 10,14,16 * * ?   每天上午10点,下午2点,40 0/30 9-17 * * ?   朝九晚五工作时间内每半小时
0 0 12 ? * WED    表示每个星期三中午120 0 12 * * ?   每天中午12点触发
0 15 10 ? * *    每天上午10:15触发
0 15 10 * * ?     每天上午10:15触发
0 15 10 * * ?    每天上午10:15触发
0 15 10 * * ? 2005    2005年的每天上午10:15触发
0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发
0 0/5 14 * * ?    在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-5 14 * * ?    在每天下午2点到下午2:05期间的每1分钟触发
0 10,44 14 ? 3 WED    每年三月的星期三的下午2:102:44触发
0 15 10 ? * MON-FRI    周一至周五的上午10:15触发
0 15 10 15 * ?    每月15日上午10:15触发
0 15 10 L * ?    每月最后一日的上午10:15触发
0 15 10 ? * 6L    每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发
示例
  1. 创建ScheduledService @Scheduled
@Service
public class ScheduledService {
     
    //秒    分    时     日    月    周几
    //0 * * * * MON-FRI
    //注意cron表达式的用法;
    @Scheduled(cron = "0 * * * * 0-7")
    public void hello(){
     
        System.out.println("hello.....");
    }

  1. 开启定时任务 @EnableScheduling
@EnableAsync  //开启异步任务
@EnableScheduling  //开启定时任务
@SpringBootApplication
public class SpringbootAsyncDemoApplication {
     
    public static void main(String[] args) {
     
        SpringApplication.run(SpringbootAsyncDemoApplication.class, args);
    }
}
  1. 直接启动程序,该任务自动执行。

你可能感兴趣的:(springboot学习,java,spring,cron)