springboot与任务

springboot与任务_第1张图片
异步任务 在实际的开发过程中使用的是非常广泛的,特别是在邮件发送,数据处理的过程中,不希望影响后面的进程,我们都会采用异步任务

注意:

@Async 一定要和 @EnableAsync 搭配使用才能生效

案例:

@Service
public class AsyncService {

    public void hello(){

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("数据处理中...");
    }

}

@RestController
public class AsyncController {

    @Autowired
    AsyncService service;

    @GetMapping("/hello")
    public String hello() {
        service.hello();
        return "success";
    }
}

正常情况下,你访问localhost:8080/hello请求,浏览器会在3秒之后作出应答.但是,如果我们想让浏览器立即作出应答,可以采用多线程异步任务的方式,示例代码如下

@Service
public class AsyncService {

    //告诉spring,这是一个异步方法,spring就会自己开一个线程池对该方法进行调用
    //该注解需要和@EnableAsync搭配才会生效
    @Async
    public void hello(){

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("数据处理中...");
    }

}

修改之后,重新启动应用,浏览器不会等待而是立即应答.

springboot与任务_第2张图片
定时任务
注意:

@Scheduled 和 @EnableScheduling结合使用才生效

@Service
public class ScheduledService1 {
	
	//开启基于注解的定时任务 @EnableScheduling
    
    /**
     * 需求:该方法需要定时执行
     * 解决方法:在方法上标注 @Scheduled 注解,它有很多的属性,并且要和 @EnableScheduling 结合才生效
     * cron : 它主要是用来指定定时任务的cron表达式 ,表达式总共6位,每位之间用空格分隔,
     * second(秒) minute(分), hour(时), day of month(日), month(月) , day of week(周几).
     *  实例: 0 * * * * MON-FRI : 表示周一到周五的每一分钟都执行一次, * 代表任意时刻,
     *  0在那个位置,表示的都是整值启动
     *  (定时执行,如果上一次任务执行超时而导致某个定时间隔不能执行,则会顺延下一个定时间隔时间。下一个任务和上一个任务的间隔时间不固定)
     */
    //@Scheduled(cron = "0 * * * * 0-7")
    //@Scheduled(cron = "0,1,2,3,4 * * * * 0-7")
    //@Scheduled(cron = "0-4 * * * * 0-7")
    @Scheduled(cron = "0/4 * * * * 0-7")  //o秒启动,每4秒执行一次
    public void hello(){
        System.out.println("hello ... ");
    }
}

常用实例:
springboot与任务_第3张图片
springboot与任务_第4张图片
springboot与任务_第5张图片
邮件的发送过程:

两个邮箱账号之间是不能直接发送邮件的,例如上图,张三想要给李四发送邮件,但是张三是QQ邮箱,李四是163邮箱,

步骤:

  • 就是张三先给QQ邮箱服务器先发送邮件,
  • 然后QQ邮箱服务器把这封邮件发送给163邮箱服务器
  • 李四上线之后从163邮箱服务器上获取这封邮件,整个过程就结束了

小结:

发送邮件,我们需要配置的有,发件人的用户名,密码,以及发件人所在的邮箱服务器的地址

邮件任务
1,导入依赖

		<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-mailartifactId>
        dependency>

2,进行邮件寄件人的用户名,密码,以及寄件人所在服务器的配置

spring:
  mail:
    username:[email protected]  # 邮箱账户
    password: xxXXXxxxx  # 授权码
    host: smtp.qq.com   # 邮箱主机地址
# 如果报错503,并且提示连接不安全,可以配置下面这句话
# spring.mail.properties.mail.smtp.ssl.enable = true

3,发送简单邮件测试

 @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    public void contextLoads() {
        //创建一个简单邮件对象
        SimpleMailMessage message = new SimpleMailMessage();
        //邮件的设置
        message.setSubject("通知,今晚开会");  //设置标题
        message.setText("今晚7.30开会"); //设置邮件内容
        message.setTo("[email protected]");  // 设置收件人
        message.setFrom("[email protected]");   //设置发件人

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

4,发送可以上传附件,以及支持HTML格式的邮件测试

 /**
     * 测试更加复杂的邮件
     */
    @Test
    public void test02() throws MessagingException {
        //创建一个可以发送消息并且携带附件的邮件对象
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        //第一个参数传入消息对象,第二个是是否支持编码
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

        //邮件的设置
        helper.setSubject("通知,今晚开会");  //设置标题
        helper.setText(" 今晚7.30 开会 ",true); //设置邮件内容
        helper.setTo("[email protected]");  // 设置收件人
        helper.setFrom("[email protected]");   //设置发件人

        //上传文件,第一个参数是文件名,第二个参数是文件或者一个输入流
        helper.addAttachment("1.jpg",new File("C:\\Users\\Desktop\\1.jpg"));
        helper.addAttachment("2.jpg",new File("C:\\Users\\Desktop\\2.jpg"));

        mailSender.send(mimeMessage);
    }

你可能感兴趣的:(学习知识总结)