zoukankan      html  css  js  c++  java
  • springboot(十一)SpringBoot任务

    github地址: https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service

    1. 异步任务

    方法名加上注解@Async,在启动类上加上@EnableAsync

        @Async //Async底层使用AOP技术,在运行时单独创建一个线程进行执行
        public void brianAsync(){
            try {
                Thread.sleep(3000);
                brianMail.sendEmail();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
       logger.debug("异步任务");
    }

    2.定时器任务

    方法名加上注解@Scheduled,在启动类上加上@EnableScheduling,最主要的掌握正则表达式的规则

    @Scheduled(cron = "0/5 * * * * *")
        public void brianScheduling() {
        logger.debug("定时任务");
     }

     补充:

    @Scheduled所支持的参数:
    
    1.cron:cron表达式,指定任务在特定时间执行;
    2.fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms;
    3.fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;
    4.fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms;
    5.fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;
    6.initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms;
    7.initialDelayString:与initialDelay的含义一样,只是将参数类型变为String;
    8.zone:时区,默认为当前时区,一般没有用到。
    
    Cron表达式范例:
    
    每隔5秒执行一次:*/5 * * * * ?
    每隔1分钟执行一次:0 */1 * * * ?
    每天23点执行一次:0 0 23 * * ?
    每天凌晨1点执行一次:0 0 1 * * ?
    每月1号凌晨1点执行一次:0 0 1 1 * ?
    每月最后一天23点执行一次:0 0 23 L * ?
    每周星期天凌晨1点实行一次:0 0 1 ? * L
    在26分、29分、33分执行一次:0 26,29,33 * * * ?

    3.定时器任务并行执行

    SpringBoot对任务有比较好的支撑,我们只需要实现SchedulingConfigurer接口,并重写setSchedulerfang方法即可

    /**
     *  设置线程池大小
     *
     *   newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行
     */
    @Configuration
    public class ScheduleConfig implements SchedulingConfigurer {
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
        }
    }

    测试结果:可以发现不是在同一个线程里面执行

     关于Exetutors的使用可以参考这篇博客:java并发编程--Executor框架

    4.邮件任务

    package com.kawa.mail;
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.javamail.JavaMailSenderImpl;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Service;
    
    import javax.mail.MessagingException;
    import javax.mail.internet.MimeMessage;
    import java.io.File;
    
    @Service
    public class BrianMail {
    
        @Autowired
        JavaMailSenderImpl javaMailSender;
    
        public void sendEmail() {
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            try {
                //multipart:true表示开启附件添加
                MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
                //邮件设置
                mimeMessageHelper.setSubject("测试邮件");
                mimeMessageHelper.setText("<p style="background-color:rgb(255,255,0)">
    " +
                        "通过 rbg 值设置背景颜色
    " +
                        "</p>
    " +
                        "<p style="background-color:rgba(255,255,0,0.25)">
    " +
                        "通过 rbg 值设置背景颜色
    " +
                        "</p>
    " +
                        "<p style="background-color:rgba(255,255,0,0.5)">
    " +
                        "通过 rbg 值设置背景颜色
    " +
                        "</p>
    " +
                        "<p style="background-color:rgba(255,255,0,0.75)">
    " +
                        "通过 rbg 值设置背景颜色
    " +
                        "</p>",true);
                mimeMessageHelper.setFrom("xxxxxxxxx@qq.com");
                mimeMessageHelper.setTo("xxxxxxxxx@qq.com");
                mimeMessageHelper.setCc("xxxxxxxxx@qq.com");
                //附件
                mimeMessageHelper.addAttachment("10086.jpg",new File("C:\Users\HYHGHHHH\Desktop\backup\10086.jpg"));
                javaMailSender.send(mimeMessage);
                System.out.println("邮件发送成功...");
            } catch (MessagingException e) {
                e.printStackTrace();
            }
    
        }
    }
  • 相关阅读:
    Oracle查看正在执行的存储过程的sid---转
    使用WITH子句重用子查询
    oracle解决显示数据的层次问题--实现数据缩进
    oracle9i、10g、11g区别 --转
    oracle10g安装在裸设备上
    在Linux系统上面创建使用裸设备的数据库
    监控Oracle数据库的常用shell脚本-转
    sql server使用维护计划定时备份完整数据库、差异数据库
    使用Advanced Installer14.3 简单打包windows窗体应用程序
    SVG Path标签 A 参数
  • 原文地址:https://www.cnblogs.com/hlkawa/p/9792717.html
Copyright © 2011-2022 走看看