广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot如何实现ApplicationEvent事件的监听与发布
  • 203
分享到

SpringBoot如何实现ApplicationEvent事件的监听与发布

2023-07-05 10:07:34 203人浏览 安东尼
摘要

这篇文章主要介绍“SpringBoot如何实现ApplicationEvent事件的监听与发布”,在日常操作中,相信很多人在springBoot如何实现ApplicationEvent事件的监听与发布问题上存在疑惑,小编查阅了各式资料,整理

这篇文章主要介绍“SpringBoot如何实现ApplicationEvent事件的监听与发布”,在日常操作中,相信很多人在springBoot如何实现ApplicationEvent事件的监听与发布问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot如何实现ApplicationEvent事件的监听与发布”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

通过发布订阅模式实现数据的异步处理,比如异步处理邮件发送

新建SpringBoot项目

项目结构

.
├── pom.xml
└── src
    └── main
        ├── java
        │   └── com
        │       └── example
        │           └── demo
        │               ├── Application.java
        │               ├── config
        │               │   └── TaskPoolConfig.java
        │               ├── controller
        │               │   └── IndexController.java
        │               ├── entity
        │               │   └── EmailDto.java
        │               ├── event
        │               │   └── SendEmailEvent.java
        │               ├── listener
        │               │   └── SendEmailListener.java
        │               └── service
        │                   ├── SendEmailService.java
        │                   └── impl
        │                       └── SendEmailServiceImpl.java
        └── resources
            ├── application.yml
            ├── static
            └── templates

实现代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="Http://Maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.7.7</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>demo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>demo</name>    <description>Demo project for Spring Boot</description>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <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.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>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>                <configuration>                    <excludes>                        <exclude>                            <groupId>org.projectlombok</groupId>                            <artifactId>lombok</artifactId>                        </exclude>                    </excludes>                </configuration>            </plugin>        </plugins>    </build></project>

Application.java

package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Application {    public static void main(String[] args) {        SpringApplication.run(Application.class, args);    }}

TaskPoolConfig.java

package com.example.demo.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;@EnableAsync@Configurationpublic class TaskPoolConfig {        @Bean    public Executor taskExecutor() {        //返回可用处理器的Java虚拟机的数量 12        int i = Runtime.getRuntime().availableProcessors();        System.out.println("系统最大线程数  : " + i);        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        //核心线程池大小        executor.setCorePoolSize(16);        //最大线程数        executor.setMaxPoolSize(20);        //配置队列容量,默认值为Integer.MAX_VALUE        executor.setQueueCapacity(99999);        //活跃时间        executor.seTKEepAliveSeconds(60);        //线程名字前缀        executor.setThreadNamePrefix("asyncServiceExecutor -");        //设置此执行程序应该在关闭时阻止的最大秒数,以便在容器的其余部分继续关闭之前等待剩余的任务完成他们的执行        executor.setAwaitTerminationSeconds(60);        //等待所有的任务结束后再关闭线程池        executor.setWaitForTasksToCompleteOnShutdown(true);        return executor;    }}

EmailDto.java

package com.example.demo.entity;import lombok.Data;@Datapublic class EmailDto {    private String email;    private String subject;    private String content;}

SendEmailEvent.java

package com.example.demo.event;import com.example.demo.entity.EmailDto;import org.springframework.context.ApplicationEvent;public class SendEmailEvent extends ApplicationEvent {    private EmailDto emailDto;    public SendEmailEvent(EmailDto emailDto) {        super(emailDto);        this.emailDto = emailDto;    }    public EmailDto getEmailDto() {        return this.emailDto;    }}

SendEmailListener.java

package com.example.demo.listener;import com.example.demo.entity.EmailDto;import com.example.demo.event.SendEmailEvent;import com.example.demo.service.SendEmailService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationListener;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Component;@Componentpublic class SendEmailListener implements ApplicationListener<SendEmailEvent> {    @Autowired    private SendEmailService sendEmailService;    @Async    @Override    public void onApplicationEvent(SendEmailEvent event) {        EmailDto emailDto = event.getEmailDto();        this.sendEmailService.sendEmail(emailDto);    }}

SendEmailService.java

package com.example.demo.service;import com.example.demo.entity.EmailDto;public interface SendEmailService {    void sendEmail(EmailDto emailDto);}

SendEmailServiceImpl.java

package com.example.demo.service.impl;import com.example.demo.entity.EmailDto;import com.example.demo.service.SendEmailService;import org.springframework.stereotype.Service;@Servicepublic class SendEmailServiceImpl implements SendEmailService {    @Override    public void sendEmail(EmailDto emailDto) {        try {            // 模拟耗时3秒            Thread.sleep(3 * 1000);        } catch (Exception e) {            System.out.println("Email发送异常");        }        System.out.println("Email发送成功 " + emailDto);    }}

IndexController.java

package com.example.demo.controller;import com.example.demo.entity.EmailDto;import com.example.demo.event.SendEmailEvent;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationEventPublisher;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class IndexController {    @Autowired    private ApplicationEventPublisher publisher;    @GetMapping("/sendEmail")    public String sendEmail() {        EmailDto emailDto = new EmailDto();        emailDto.setEmail("tom@qq.com");        emailDto.setSubject("邮件标题");        emailDto.setContent("邮件内容");        // 发布事件        publisher.publishEvent(new SendEmailEvent(emailDto));        return "success";    }}

到此,关于“SpringBoot如何实现ApplicationEvent事件的监听与发布”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: SpringBoot如何实现ApplicationEvent事件的监听与发布

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot如何实现ApplicationEvent事件的监听与发布
    这篇文章主要介绍“SpringBoot如何实现ApplicationEvent事件的监听与发布”,在日常操作中,相信很多人在SpringBoot如何实现ApplicationEvent事件的监听与发布问题上存在疑惑,小编查阅了各式资料,整理...
    99+
    2023-07-05
  • 详解SpringBoot实现ApplicationEvent事件的监听与发布
    目录新建SpringBoot项目实现代码pom.xmlApplication.javaTaskPoolConfig.javaEmailDto.javaSendEmailEvent.j...
    99+
    2023-03-08
    SpringBoot ApplicationEvent事件监听发布 SpringBoot ApplicationEvent事件监听 SpringBoot ApplicationEvent事件发布 Sp
  • Spring事件发布与监听怎么实现
    这篇文章主要讲解了“Spring事件发布与监听怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring事件发布与监听怎么实现”吧!  一、事件监听相关概念介绍  1、流程分析  事...
    99+
    2023-06-02
  • 如何实现Spring事件发布监听、顺序监听和异步监听
    这篇文章给大家分享的是有关如何实现Spring事件发布监听、顺序监听和异步监听的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. Spring的事件通知Spring的事件通知本质上就是发布-订阅,即生产者-消费者...
    99+
    2023-06-22
  • SpringBoot事件发布和监听的示例分析
    这篇文章主要介绍SpringBoot事件发布和监听的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内...
    99+
    2023-06-25
  • 详解SpringBoot实现事件同步与异步监听
    目录简介事件监听简述实例同步监听(无序)同步监听(有序)异步监听(无序)简介 说明 本文用示例介绍SpringBoot中的事件的用法及原理。 事件监听简述 事件的发布与监听从属于观察...
    99+
    2022-11-13
  • Spring的事件发布与监听方式是什么
    本篇内容介绍了“Spring的事件发布与监听方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!事件主要代码在org.springfra...
    99+
    2023-07-05
  • Spring事件发布与监听机制的用法示例
    小编给大家分享一下Spring事件发布与监听机制的用法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、ApplicationContext 事件机制Appl...
    99+
    2023-06-20
  • 如何实现vuejs事件监听
    这篇文章主要介绍如何实现vuejs事件监听,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在vuejs中,可以使用“v-on”指令来实现事件监听,该指令用...
    99+
    2022-10-19
  • springboot应用服务启动事件的监听实现
    目录一、简介二、常用场景介绍二、代码小实验 通过@Component定义方式实现通过@Bean定义方式实现三、执行测试四、总结五、问题总结一、简介 Spring Boot提供了两个接...
    99+
    2022-11-13
  • vue监听滚动事件如何实现滚动监听
    这篇文章主要为大家展示了“vue监听滚动事件如何实现滚动监听”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue监听滚动事件如何实现滚动监听”这篇文章吧。在vu...
    99+
    2022-10-19
  • Android开发之Button事件实现与监听方法总结
    本文实例总结了Android开发之Button事件实现与监听方法。分享给大家供大家参考,具体如下: 先来介绍Button事件实现的两种方法 main.xml <...
    99+
    2022-06-06
    button 监听 方法 android开发 Android
  • Node.js如何自定义对象事件的监听与发射
    本文小编为大家详细介绍“Node.js如何自定义对象事件的监听与发射”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node.js如何自定义对象事件的监听与发射”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、N...
    99+
    2023-07-02
  • springboot应用服务启动事件的监听怎么实现
    本篇内容主要讲解“springboot应用服务启动事件的监听怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot应用服务启动事件的监听怎么实现”吧!一、简介Spring B...
    99+
    2023-06-29
  • 如何实现Flex键盘事件的监听机制
    这篇文章给大家分享的是有关如何实现Flex键盘事件的监听机制的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Flex键盘事件的监听Flex的事件监听机制很完善,下面主要简单的讲一下Flex键盘事件的监听。首先,要理...
    99+
    2023-06-17
  • Layui如何实现表格监听行单双击事件
    这篇文章主要为大家展示了“Layui如何实现表格监听行单双击事件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Layui如何实现表格监听行单双击事件”这篇文章吧...
    99+
    2022-10-19
  • Vue.js如何通过监听滚动事件实现动态锚点
    这篇文章主要介绍了Vue.js如何通过监听滚动事件实现动态锚点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体效果如下:如果是传统项目,这...
    99+
    2022-10-19
  • 如何利用原生JS实现触摸滑动监听事件
    前言 今天写一个小Demo,有个地方涉及到了左滑右滑的逻辑,本来想着用插件来着,但是想到自己好久没用原生JS写滑动的监听了,所以试着用原生JS来实现了一下,毕竟温故而知新嘛,同时做...
    99+
    2022-11-12
  • html5中如何实现pushstate以及监听浏览器返回事件
    这篇文章主要介绍了html5中如何实现pushstate以及监听浏览器返回事件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。pushstate与监听浏览器返回解决的问题实际开...
    99+
    2023-06-09
  • android io.socket如何拦截所有监听事件实现和服务器端anything一样的事件
    重写OkHttpClient class MyOkHttpClient extends OkHttpClient { @Override public WebSocket newWebSocket(...
    99+
    2022-06-06
    io 和服 服务器 监听 事件 socket Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作