怀旧网,博客详情:Spring Boot 任务

1、Mybatis 详细介绍

2、Spring 详细介绍

3、SpringMVC 详细介绍

4、Vue 使用详细介绍

5、Spring Boot 介绍

6、Spring Boot 配置文件讲解

7、Spring Security 介绍

8、Shiro 介绍

9、Spring Boot 整合 Swagger

10、Spring Boot 任务

11、Redis 详解介绍

12、Docker 使用详细介绍

13、JVM 介绍

14、JUC并发编程

原创

Spring Boot 任务

异步任务

1、创建一个Spring Boot 项目

image-20240513161752343

2、 编写模拟业务

image-20240513162010174

TaskService

TaskController@Service
public class TaskService {
    // 测试异步开启
    public void task(){
        System.out.println("处理前......");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("处理后......");
    }
}

TaskController

@RestController
public class TaskController {
    @Autowired
    TaskService taskService;

    @RequestMapping("/task")
    public String task(){
        taskService.task();

        return "ok";
    }
}

启动访问测试:

image-20240513162122361

访问的时候,右上角会转圈,当等待5s后才响应前端数据

3、解决方案一

使用多线程解决问题:

修改service层代码:

@Service
public class TaskService {
    // 测试异步开启
    public void task(){
        new Thread(() -> {
            System.out.println("处理前......");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("处理后......");
        }).start();
    }
}

重启访问:

image-20240513162312988

点击访问立马出来结果;

但是这种方式比较麻烦,这时就可以使用Springboot 自带的异步任务开启功能。

4、Spring Boot 开启异步任务

直接在方法上面使用注解: @Async

// 测试异步开启
@Async
public void task(){
    System.out.println("处理前......");
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("处理后......");
}

但是想使用异步功能需要再启动类上添加注解: @EnableAsync

image-20240513162510623

重启访问:

image-20240513162531291

同样实现秒访问成功。

定时任务

开启定时任务功能:@EnableScheduling

image-20240513171446207

编写测试代码:

@Service
public class TimedTasksService {
    // 参数介绍 秒(0~59) 分(0~59) 时(0~24) 日(1~31) 月(1~12) 周(0~7: 0 和 7 都代表周日)
    @Scheduled(cron = "0 21 17 * * *") // 这里表示 每周的每月每日的14:021:00 执行这段代码
    public void timedTasks(){
        System.out.println("hello ........");
    }
}

当前系统时间:

image-20240513172010450

查看控制台输出:

image-20240513172106663

image-20240513172109869

时间匹配:自动执行了方法。

其他时间格式编写,请参考:网页链接

在线生成器地址:网页链接

邮件发送

首先需要使用邮件服务,需要去对应服务商申请邮件发送秘钥:

然后导入邮件服务所需的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置所需的所有配置:

spring:
  # 邮件发送配置
  mail:
    default-encoding: UTF-8 # 编码
    host: smtp.qq.com # 发送的服务商
    port: 587 # 端口号
    username:  # 发件人邮箱
    password:  # 秘钥
    properties: # 开启加密验证
      mail.mtp.ssl.enbale: true

编写一个uitl方法:

@Component
public class Mail {
    @Autowired
    private JavaMailSenderImpl mailSender;

    /**
     * 发送邮件工具类
     * @param email 接收者的邮箱账号
     * @param subject 邮件标题
     * @param text 邮件内容
     */
    public void mailText(String email, String subject, String text){
        try {
            SimpleMailMessage mailMessage = new SimpleMailMessage();
            mailMessage.setFrom("444915368@qq.com"); // 发送者
            mailMessage.setTo(email);
            mailMessage.setSubject(subject);
            mailMessage.setText(text);
            mailSender.send(mailMessage);
        } catch (Exception e) {}
    }
}

编写controller测试访问:

@RestController
public class TaskController {
    @Autowired
    Mail mail;


    @RequestMapping("/testEmail")
    public String task(){
        mail.mailText("444915368@qq.com", "标题", "内容");

        return "ok";
    }
}

image-20240513164217695

访问成功:

查看邮箱收到的邮件

image-20240513164245554

发送复杂邮件:

/**
     * 发送邮件工具类
     * @param email 接收者的邮箱账号
     * @param subject 邮件标题
     * @param text 邮件内容
     * @param files 所有附件文件
     */
public void mailText(String email, String subject, String text, String[] files){
    try {
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        // 参数(1. 创建的对象 2. 是否开启多文件 3. 邮件编码(不写就是默认编码))
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");

        helper.setFrom("444915368@qq.com");
        helper.setTo(email);
        helper.setSubject(subject);
        // 第二个参数为true 表示邮件内容可以被解析为Html
        helper.setText(text, true);

        for (int i = 0; i < files.length; i++) {
            // 添加一个附件 参数(1. 附件的名称, 2. 附件的文件地址)
            helper.addAttachment(files[i].substring(files[i].lastIndexOf("\\")), new File(files[i]));
        }

        mailSender.send(mimeMessage);
    } catch (Exception e) {}
}

测试controller

@RestController
public class TaskController {
    @Autowired
    Email email;


    @RequestMapping("/testEmail")
    public String task(){
        email.mailText("444915368@qq.com", "标题", "<h1 style='color: red;'>内容</h1>", new String[]{"E:\\重要文件\\头像\\huaijiu.jpg"});

        return "ok";
    }
}

访问测试:

image-20240513165558490

查看邮件内容

image-20240513170010178

预览附件:

image-20240513170031363

  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言