返回顶部
首页 > 资讯 > 精选 >SpringBoot整合Quartz及异步调用的方法是什么
  • 402
分享到

SpringBoot整合Quartz及异步调用的方法是什么

2023-07-05 11:07:39 402人浏览 八月长安
摘要

这篇文章主要介绍“SpringBoot整合Quartz及异步调用的方法是什么”,在日常操作中,相信很多人在springBoot整合Quartz及异步调用的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答

这篇文章主要介绍“SpringBoot整合Quartz及异步调用的方法是什么”,在日常操作中,相信很多人在springBoot整合Quartz及异步调用的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot整合Quartz及异步调用的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、异步方法调用

由于多个任务同时执行时,默认为单线程,所以我们用异步方法调用,使其成为多线程执行

看一个案例

1、导入依赖

 <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-WEB</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>            <scope>runtime</scope>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>

2、创建异步执行任务线程池

这里我们使用springboot自带的线程池

package com.lzl.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.AsyncConfigurer;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;@Configurationpublic class AsyncExcutorPoolConfig implements AsyncConfigurer {    @Bean("asyncExecutor")    @Override    public Executor getAsyncExecutor() {        //Spring自带的线程池(最常用)        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();        //线程:IO密集型 和 CPU密集型        //线程设置参数        taskExecutor.setCorePoolSize(8);//核心线程数,根据电脑的核数        taskExecutor.setMaxPoolSize(16);//最大线程数一般为核心线程数的2倍        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);//任务执行完成后关闭        return taskExecutor;    }}

注意注解不要少

3、创建业务层接口和实现类

package com.lzl.Service;public interface AsyncService {    void testAsync1();    void testAsync2();}
package com.lzl.Service.impl;import com.lzl.Service.AsyncService;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Service;@Servicepublic class AsyncImpl implements AsyncService {    @Async    @Override    public void testAsync1() {        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("精准是唯一重要的标准!");    }    @Async("asyncExecutor")//开启异步执行    @Override    public void testAsync2() {        try {            Thread.sleep(3000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("效率是成功的核心关键!");    }}

创建业务层接口和实现类

package com.lzl.task;import com.lzl.Service.AsyncService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/login")public class LoginController {    @Autowired    private AsyncService service;    @RequestMapping("/Async1")    public String testAsync1(){        service.testAsync1();        return "牛逼!";    }    @RequestMapping("/Async2")    public String testAsync2(){        service.testAsync2();        return "不牛逼!";    }}

在启动类开启异步

SpringBoot整合Quartz及异步调用的方法是什么

整体目录结构如下:

SpringBoot整合Quartz及异步调用的方法是什么

测试
运行项目,访问controller

SpringBoot整合Quartz及异步调用的方法是什么

访问controller时,页面直接出现返回值,控制台过了两秒打印文字,证明异步执行成功!

SpringBoot整合Quartz及异步调用的方法是什么

二、测试定时任务

1.导入依赖

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>            <scope>runtime</scope>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>

2.编写测试类,开启扫描定时任务

package com.lzl.task;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.Async;import org.springframework.scheduling.annotation.Scheduled;import java.util.Date;//任务类@Configurationpublic class Tasks {    @Async    @Scheduled(cron = "*/2 * * * * ?")    public void task1(){        System.out.println("效率"+new Date().toLocaleString());    }    @Async    @Scheduled(cron = "*/1 * * * * ?")    public void task2(){        System.out.println("精准"+new Date().toLocaleString());    }}

SpringBoot整合Quartz及异步调用的方法是什么

3.测试

SpringBoot整合Quartz及异步调用的方法是什么

三、实现定时发送邮件案例

这里以QQ邮箱为例,这个功能类似于通过邮箱找回密码类似,需要我们进行授权码操作

1.邮箱开启IMAP服务

登陆QQ邮箱,找到帐户,下拉

看到如下图:

SpringBoot整合Quartz及异步调用的方法是什么

我这里已经开启了,按照步骤操作,会有一个授权码,保存好下边步骤要用,此处不再演示

2.导入依赖

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!-- 邮箱 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-mail</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-devtools</artifactId>            <scope>runtime</scope>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>

3.导入EmailUtil

package com.lzl.utils;import javax.mail.*;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import java.util.Properties;import java.util.Random;public class EmailUtil {    private static final String USER = "@qq.com"; // 发件人邮箱地址    private static final String PASSWord = ""; // qq邮箱的客户端授权码(需要发短信获取)            public static boolean sendMail(String to, String text, String title) {        try {            final Properties props = new Properties();            props.put("mail.smtp.auth", "true");            props.put("mail.smtp.host", "smtp.qq.com");            // 发件人的账号            props.put("mail.user", USER);            //发件人的密码            props.put("mail.password", PASSWORD);            // 构建授权信息,用于进行SMTP进行身份验证            Authenticator authenticator = new Authenticator() {                @Override                protected PasswordAuthentication getPasswordAuthentication() {                    // 用户名、密码                    String userName = props.getProperty("mail.user");                    String password = props.getProperty("mail.password");                    return new PasswordAuthentication(userName, password);                }            };            // 使用环境属性和授权信息,创建邮件会话            Session mailSession = Session.getInstance(props, authenticator);            // 创建邮件消息            MimeMessage message = new MimeMessage(mailSession);            // 设置发件人            String username = props.getProperty("mail.user");            InternetAddress fORM = new InternetAddress(username);            message.setFrom(form);            // 设置收件人            InternetAddress toAddress = new InternetAddress(to);            message.setRecipient(Message.RecipientType.TO, toAddress);            // 设置邮件标题            message.setSubject(title);            // 设置邮件的内容体            message.setContent(text, "text/html;charset=UTF-8");            // 发送邮件            Transport.send(message);            return true;        } catch (Exception e) {            e.printStackTrace();        }        return false;    }    //随机生成num个数字验证码    public static String getValidateCode(int num) {        Random random = new Random();        String validateCode = "";        for (int i = 0; i < num; i++) {            //0 - 9 之间 随机生成 num 次            int result = random.nextInt(10);            validateCode += result;        }        return validateCode;    }    //测试    public static void main(String[] args) throws Exception {        //给指定邮箱发送邮件        EmailUtil.sendMail("729953102@qq.com", "你好,这是一封测试邮件,无需回复。", "测试邮件随机生成的验证码是:" + getValidateCode(6));        System.out.println("发送成功");    }}

4.编写邮件发送方法

package com.lzl.task;import com.lzl.utils.EmailUtil;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.Scheduled;@Configurationpublic class TaskEmail {    //指定时间进行发送邮件    @Scheduled(cron = "10 49 11 * * ?")    public void sendMail(){        EmailUtil.sendMail("自己的邮箱@qq.com", "效率,是成功的核心关键!", "测试邮件随机生成的验证码是:" + EmailUtil.getValidateCode(6));    }}

5.开启异步和定时任务

package com.lzl;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableAsync//开启异步@EnableScheduling//开启定时任务public class QuartzStudyApplication {    public static void main(String[] args) {        SpringApplication.run(QuartzStudyApplication.class, args);    }}

到此,关于“SpringBoot整合Quartz及异步调用的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: SpringBoot整合Quartz及异步调用的方法是什么

本文链接: https://lsjlt.com/news/351252.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot整合Quartz及异步调用的方法是什么
    这篇文章主要介绍“SpringBoot整合Quartz及异步调用的方法是什么”,在日常操作中,相信很多人在SpringBoot整合Quartz及异步调用的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-05
  • SpringBoot整合Quartz及异步调用的案例
    目录前言一、异步方法调用1、导入依赖2、创建异步执行任务线程池3、创建业务层接口和实现类二、测试定时任务1.导入依赖2.编写测试类,开启扫描定时任务3.测试三、实现定时发送邮件案例1...
    99+
    2023-03-09
    SpringBoot整合Quartz SpringBoot 异步调用
  • springboot整合quartz定时任务框架的方法是什么
    今天小编给大家分享一下springboot整合quartz定时任务框架的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-06-26
  • SpringBoot整合aws的方法是什么
    这篇文章主要讲解了“SpringBoot整合aws的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot整合aws的方法是什么”吧!引入依赖  &...
    99+
    2023-06-21
  • SpringBoot整合Jackson的方法是什么
    这篇文章主要介绍了SpringBoot整合Jackson的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合Jackson的方法是什么文章都会有所收获,下面我们一起来看看吧。一、J...
    99+
    2023-07-05
  • springboot整合mongodb的方法是什么
    这篇文章主要介绍“springboot整合mongodb的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot整合mongodb的方法是什么”文章能帮助大家解决问题。1.mo...
    99+
    2023-07-05
  • SpringBoot整合Swagger的方法是什么
    本文小编为大家详细介绍“SpringBoot整合Swagger的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot整合Swagger的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-06
  • SpringBoot整合RocketMQ的方法是什么
    这篇文章主要介绍了SpringBoot整合RocketMQ的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合RocketMQ的方法是什么文章都会有所收获,下面我们一起来看看吧。1...
    99+
    2023-07-05
  • Java异步调用的方法是什么
    这篇文章主要讲解了“Java异步调用的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java异步调用的方法是什么”吧!一、创建线程@Testpublic void&nbs...
    99+
    2023-06-27
  • SpringBoot整合任务系统quartz和SpringTask的方法
    目录SpringBoot整合任务系统1:Quartz2:Task总结:SpringBoot整合任务系统 ​ 这里说的任务系统指的是定时任务。定时任务是企业级开发中必不可少的组成部分,...
    99+
    2022-11-13
    SpringBoot整合任务系统 SpringBoot quartz和SpringTask
  • springboot整合druid及配置依赖的方法是什么
    本篇内容主要讲解“springboot整合druid及配置依赖的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot整合druid及配置依赖的方法是什么”吧!Druid简...
    99+
    2023-06-22
  • springboot hutool整合email的方法是什么
    本篇内容主要讲解“springboot hutool整合email的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot hutool整合email的...
    99+
    2023-07-05
  • SpringBoot整合Lettuce redis的方法是什么
    这篇文章主要介绍了SpringBoot整合Lettuce redis的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合Lettuce redis的方法是什么文章都会有所收获,下面...
    99+
    2023-07-06
  • SpringBoot中异步调用@Async的方法
    本篇内容主要讲解“SpringBoot中异步调用@Async的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中异步调用@Async的方法...
    99+
    2024-04-02
  • python异步调用shell的方法是什么
    在Python中,可以使用`subprocess`模块来创建和管理子进程,以及执行外部命令。`subprocess`模块提供了多种方...
    99+
    2023-09-22
    python shell
  • JWT整合Springboot的方法步骤
    目录1.基于JWT认证1.1 认证流程1.2 JWT优势1.3 JWT的结构是什么2.使用JWT3.整合Springboot1.基于JWT认证 1.1 认证流程 首先,前...
    99+
    2024-04-02
  • python异步回调的方法是什么
    在Python中,可以使用以下几种方法实现异步回调:1. 使用asyncio模块:asyncio是Python标准库中的异步编程框架...
    99+
    2023-09-22
    python
  • SpringBoot整合MQTT并实现异步线程调用的问题
    目录为什么选择MQTT使用背景代码实现基础代码异步线程处理实现为什么选择MQTT MQTT的定义相信很多人都能讲的头头是道,本文章也不讨论什么高大上的东西,旨在用最简单直观的方式让每...
    99+
    2024-04-02
  • SpringBoot整合Thymeleaf视图的方法是什么
    这篇文章主要介绍了SpringBoot整合Thymeleaf视图的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot整合Thymeleaf视图的方法是...
    99+
    2024-04-02
  • java接口异步调用的方法是什么
    在Java中,可以使用以下几种方法来实现接口的异步调用: 使用回调函数(Callback):在接口中定义一个回调方法,然后在调用方...
    99+
    2023-10-25
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作