2

springboot中的任务处理 - 路漫漫qixiuyuanxi

 2 years ago
source link: https://www.cnblogs.com/lumanmanqixiuyuanxi/p/16469086.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

springboot中的任务处理

一.异步任务

在开发中有时用户提交的数据,后台需要一定时间才能做出响应,此时用户在前台也不能在等待中,此时就应该先开启异步请求处理,利用多线程,先给前台反馈,后台另一线程去处理数据。

1.创建异步处理请求

package com.springboot.assigment.service;

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

/**
 * @author panglili
 * @create 2022-07-12-8:19
 */

//异步请求注解,表示此类开启异步请求
@Async
@Service
public class AsyncService {
    public void Asycn(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("数据处理中……");
    }
}

此程序中,后台需要三秒等待才能处理好请求。

2.controller调用异步业务请求的方法

package com.springboot.assigment.controller;

import com.springboot.assigment.service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author panglili
 * @create 2022-07-12-8:23
 */
@Controller
public class AsycnController {

    @Autowired
    AsyncService asyncService;

    @RequestMapping("/asycn")
    @ResponseBody
    public String asycn(){
        asyncService.Asycn();
        return "ok";
    }
}

在执行完对异步业务的调用之后才会返回给前台一个ok!

3.主程序开启异步处理,创建多线程池!

@EnableAsync 
//开启异步处理,底部开启了一个线程池存放异步请求的处理

总结:实现异步处理只需要加上两个注解,在异步请求服务上加上@Async在主程序上加上@EnableAsync 即可!

二.邮件任务

1.导包

<!--邮件任务-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.配置文件properties

[email protected]
spring.mail.password=lswpwkcyalcsdhjc


#开启加密验证
spring.mail.properties.mail.smtp.ssl.enable=true

spring.mail.host=smtp.qq.com

spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.starttls.required=false

3.邮件发送方法

class SpringbootApplicationTests {

    @Autowired
    JavaMailSender mailSender;
    @Test
    void contextLoads() {

        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("你好");
        message.setText("这是发送内容~");
        message.setTo("[email protected]");
        message.setFrom("[email protected]");
        mailSender.send(message);

    }

}

简单的邮件发送功能完成!

三.定时执行任务

1.写一个需要定时执行的任务

package com.springboot.assigment.service;

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

/**
 * @author panglili
 * @create 2022-07-12-10:00
 */
@Service
public class ScheduledService {


    //cron表达式定义时间
    //注解定时任务的时间
    @Scheduled(cron="0 15 10 * * ?")
    public void hello(){
        System.out.println("hello,你被执行了~");
    }
}

2.主程序开启定时调用

@EnableScheduling//开启定时功能支持

只需要两个简单的注解

@Scheduled://注解定时任务的时间

@EnableScheduling://开启定时功能支持

ok!


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK