java

异步注解+邮件发送+定时执行任务

rzk · 5月30日 · 2020年本文共3674个字 · 预计阅读13分钟83次已读

##新建一个SpringBoot项目
##开启异步

###在service包新建AsyncController

@Service
public class AsyncService {

    //告诉Spring这是一个异步的方法
    @Async
    public void hello() throws InterruptedException {

        long start = System.currentTimeMillis();
        Thread.sleep(3000);
        System.out.println("结束");
        long end = System.currentTimeMillis();
        long usedTime = (end-start);
        System.out.println("时间"+usedTime);
    }
}

###写一个Controller

@RestController
public class AsyncController {
    //调用service
    @Autowired
    AsyncService asyncService;
    @RequestMapping("/hello")
    public String hello(){
        asyncService.hello();
        return "ok";
    }
}

###需要在主程序开启异步注解

//开启异步注解功能
@EnableAsync //开启异步注解功能

###启动测试

程序会先显示controller里面的方法,返回ok后,就去调度service的任务
这样就实现了异步的效果,用户可以更好的体验,而不是等待service执行后才去返回
异步注解+邮件发送+定时执行任务

##邮件发送

导入依赖

org.springframework.boot
spring-boot-starter-mail

###配置文件

spring.mail.username=你的邮箱@qq.com
spring.mail.password=开启服务:POP3/SMTP服务 获取密码

服务器183.3.225.42 smtp.qq.com

spring.mail.host=183.3.225.42

开启加密验证

spring.mail.properties.mail.smtp.ssl.enable=true

###发送一封简单的邮件

 @Autowired
    JavaMailSenderImpl javaMailSender;

    @Test
    void contextLoads() {
        //发送一个复杂的邮件
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("芮哥哥你好呀");
        message.setText("谢谢你发信息给我");

        message.setTo("**@qq.com");接收邮件的qq
        message.setFrom("**@qq.com");发送的qq

        javaMailSender.send(message);
    }

#睿共享##发送一个复杂的邮件

> MimeMessageHelper:支持多文件需要加true
    @Test
    void contextLoads2() throws MessagingException {
        //发送一个简单的邮件
        MimeMessage message = javaMailSender.createMimeMessage();
        //正文  MimeMessageHelper:支持多文件需要加true
        MimeMessageHelper messageHelper = new MimeMessageHelper(message,true);
        messageHelper.setSubject("你好呀");
        //setText:开启true就可以解析标签
        messageHelper.setText("<p style='color:red'>谢谢你发信息给我</p>",true);

        //附件
        messageHelper.addAttachment("第一次.png",new File("第一次.png"));
        messageHelper.setTo("10776@qq.com");
        messageHelper.setFrom("73060@qq.com");

        javaMailSender.send(message);
    }

上面的代码运行就可以发送邮件

    /**
     *MimeMessageHelper:支持多文件需要加true
     *
     * @param html
     * @param subject:文本内容
     * @param text:标题
     * @throws MessagingException
     * setTo:指明收件人
     * setFrom:指明发件人
     */

    void sendMail(Boolean html,String subject,String text) throws MessagingException {
        //发送一个复杂的邮件
        MimeMessage message = javaMailSender.createMimeMessage();
        //正文
        MimeMessageHelper messageHelper = new MimeMessageHelper(message,html);
        messageHelper.setSubject(subject);
        messageHelper.setText(text,ht睿共享ml);
        //附件
        messageHelper.addAttachment("第一次.png",new File("D:\我的文档\桌面\第一次.png"));
        messageHelper.setTo("60@qq.com");
        messageHelper.setFrom("60@qq.com");
        javaMailSender.send(message);
    }

##定时任务

需要用到两个接口
TaskExecutor 任务执行者
TaskScheduler 任务调度者

@EnableScheduling 在主程序开启定时功能的注解
@Scheduled 什么时候执行

###在controller写一个每两秒执行一次的程序

// 秒  分  时  日  月   周几
//天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
@Scheduled(cron = "0/2 * * * * *")
public void conut() {
    System.out.println("执行成功");
}

###@EnableScheduling 在主程序开启定时功能的注解

##启动程序测试
异步注解+邮件发送+定时执行任务

##可以把发邮件和定时加在一起

###发一个定时邮件

###需要配置

spring.mail.username1769073060@qq.com
spring.mail.password=密码

服务器183.3.225.42 smtp.qq.com

spring.mail.host=183.3.225.42

开启加密验证

spring.mail.properties.mail.smtp.ssl.enable=true

###service层

    /**
     *MimeMessageHelper:支持多文件需要加true
     *
     * @param html
     * @param睿共享 subject:文本内容
     * @param text:睿共享标题
     * @throws MessagingException
     * setTo:指明收件人
     * setFrom:指明发件人
     */
public void mail() throws MessagingException {
    void sendMail(Boolean html,String subject,String text) throws MessagingException {
        //发送一个复杂的邮件
        MimeMessage message = javaMailSender.createMimeMessage();
        //正文
        MimeMessageHelper messageHelper = new MimeMessageHelper(message,html);
        messageHelper.setSubject(subject);
        messageHelper.setText(text,html);
        //附件
        messageHelper.addAttachment("第一次.png",new File("D:\我的文档\桌面\第一次.png"));
        messageHelper.setTo("60@qq.com");
        messageHelper.setFrom("60@qq.com");
        javaMailSender.send(message);
    }
}

controller设置定时

    //在一个特定的时间执行这个方法  Timer
    @RequestMapping("/mail")
    //cron
    @Scheduled(cron = "0/2 * * * * *")
    public String Ma睿共享il() throws MessagingException {
        asyncService.mail();
        return "邮件发送成功";
    }

###别忘记在主程序加@EnableScheduling //开启定时功能的注解

##一个定时邮件就搞定了

0 条回应