【WEEK15】 【DAY1】异步任务【中文版】

2024.6.3 Monday

17.异步、定时、邮件任务

在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。还有一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。还有就是邮件的发送,微信的前身也是邮件服务呢?这些东西都是怎么实现的呢?其实SpringBoot都给我们提供了对应的支持,我们上手使用十分的简单,只需要开启一些注解支持,配置一些配置文件即可!那我们来看看吧~

17.1.异步任务

17.1.1.新建springboot-09-test项目

在这里插入图片描述
新建项目时出现Initialization failed for ‘https://start.spring.io/’ Please check URL, network and proxy settings.解决方法:
【Spring常见错误】Initialization failed for ‘https://start.spring.io‘-阿里云开发者社区 (aliyun.com)
在这里插入图片描述
添加maven支持(在Project Structure->Modules点击加号添加对应项目),按照惯例修改settings中的maven,jdk和Java版本,Project Structure中的jdk和Java版本。修改pom中的springframework版本到2.7.13,修改pom.xml添加Thymeleaf依赖,重新加载Maven。
删除多余文件

17.1.2.创建一个service包

17.1.2.1.创建一个类AsyncService

在这里插入图片描述

异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。
编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况:

package com.P51.service;

import org.springframework.stereotype.Service;

@Service
public class AsyncService {
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("数据正在处理");
    }
}

17.1.3.编写controller包

17.1.3.1.编写AsyncController类
package com.P51.controller;

import com.P51.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AsyncController {

    @Autowired
    AsyncService asyncService;

    @RequestMapping("/hello")
    public String hello(){
        asyncService.hello();   //等待三秒
        return "finished";
    }
}

17.1.4.运行Springboot09TestApplication.java

【同步等待】运行http://localhost:8080/hello后等待三秒后才能够在网页上显示“finished”,同时在console上打印出“数据正在处理”
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

问题:我们如果想让用户直接得到消息,就在后台使用多线程的方式进行处理即可,但是每次都需要自己手动去编写多线程的实现的话,太麻烦了,我们只需要用一个简单的办法,在我们的方法上加一个简单的注解即可。

17.1.5.修改Springboot09TestApplication.java

package com.P51;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

//开启异步注解功能
@EnableAsync
@SpringBootApplication
public class Springboot09TestApplication {

   public static void main(String[] args) {
      SpringApplication.run(Springboot09TestApplication.class, args);
   }

}

17.1.6.修改AsyncService.java

package com.P51.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class AsyncService {
    //告诉spring这是一个异步的方法
    @Async
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        System.out.println("数据正在处理");
    }
}

17.1.7.重启Springboot09TestApplication.java

【异步任务】运行http://localhost:8080/hello后直接在网页上显示“finished”,在等待三秒后在console上打印出“数据正在处理”
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值