springboot2.4实现事件监听

news/2024/7/7 18:48:28

springboot2.4实现事件监听

物料准备:

1.一个事件类

2.一个监听方法

3.发布事件

自定义一个事件类MyEvent.java

package com.example.demo.evt;

import lombok.Data;

/**
 * 1.创建事件类
 *
 * 创建1个事件类,用于封装你想传递的数据。
 * 这个事件类可以是一个普通的pojo类,不需要实现任何特定的接口
 */
@Data
public class MyEvent  {

    private Long ts;
    private String msg;
}

定义事件的监听类及监听方法

package com.example.demo.evt;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

/**
 * 2.创建监听方法
 *
 * 在合适的类或组件中创建一个监听方法,
 * 用 @EventListener 注解标注这个方法,
 * 并指定要监听的事件类型作为参数
 *
 *
 */

@Slf4j
@Component
public class MyEvtListener  {

    @EventListener
    public void handleEvent(MyEvent myEvent) {
        String msg = myEvent.getMsg();
        Long ts = myEvent.getTs();
        log.info("监听逻辑t1---evt msg:{}",msg);
        log.info("监听逻辑t1---evt ts:{}",ts);
    }


    //  @EventListener 方法可以有多个,并且可以监听不同类型的事件。
    // 当事件被发布时,所有匹配的 @EventListener 方法都会触发。
    //
    //  多个EventListener方法监听 同一个事件对象 时,监听方法的执行顺序是随机的。
    //
    @EventListener
    public void handleEvent2(MyEvent myEvent) {
        String msg = myEvent.getMsg();
        Long ts = myEvent.getTs();
        log.info("监听逻辑t2-evt msg:{}",msg);
        log.info("监听逻辑t2-evt ts:{}",ts);
    }
}

发布事件

package com.example.demo.evt;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

/**
 * 3.发布事件: 在适当的时候,通过 ApplicationEventPublisher 发布事件。
 *
 *  可以通过publishEvent方法来发布事件,将事件对象作为参数传递给该方法。
 *
 */
@Component
public class PubEvt {
    @Autowired
    private ApplicationEventPublisher eventPublisher;

    //如果想实现 异步发送事件,可以在这个方法上加@Async注解
    public void sendMsgEvt(String msg){
        //创建 事件对象
        MyEvent event = new MyEvent();
        event.setMsg(msg);
        event.setTs(System.currentTimeMillis());
        //发布 事件对象
        eventPublisher.publishEvent(event);
    }
}


测试发布事件

@Component
@Slf4j
public class TestPub {

    @Autowired
    private PubEvt pubEvt;

    @Scheduled(cron = "*/5 * * * * ?")
    public void testSend() throws Exception{

        pubEvt.sendMsgEvt("ret23t23t--"+System.currentTimeMillis());
    }    
}        
2023-07-02 10:44:49.445  INFO 8424 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 3.111 seconds (JVM running for 3.752)
2023-07-02 10:44:50.013  INFO 8424 --- [   scheduling-1] com.example.demo.evt.MyEvtListener       : 监听逻辑t2-evt msg:ret23t23t--1688525090013
2023-07-02 10:44:50.024  INFO 8424 --- [   scheduling-1] com.example.demo.evt.MyEvtListener       : 监听逻辑t2-evt ts:1688525090013
2023-07-02 10:44:50.024  INFO 8424 --- [   scheduling-1] com.example.demo.evt.MyEvtListener       : 监听逻辑t1---evt msg:ret23t23t--1688525090013
2023-07-02 10:44:50.024  INFO 8424 --- [   scheduling-1] com.example.demo.evt.MyEvtListener       : 监听逻辑t1---evt ts:1688525090013


http://lihuaxi.xjx100.cn/news/1313046.html

相关文章

【java】hutool发送http请求,配置ssl忽略

1.发送请求 import cn.hutool.http.HttpRequest; /*** cf*/ public class TqOdpServiceClient {private static String url"url";;public static String execute(String http,String params,String auth) {String result2 HttpRequest.post(httpurl).header("A…

深度学习-目标检测之边界框bbox坐标转换公式汇总

深度学习 文章目录 深度学习 尝试着写了一个可以转换任何维度的任意格式的bbox函数。 本程序目的是: 可以转换以下三种格式的输入数据 list,numpy,tensor,维度可以从0维到2维, 也就是shape为:(4,) (3, 4) torch.Size([4]) torch.…

【rtklibexployer】RTKLIB Static-start feature 静态启动模式

原文:RTKLIB: Static-start feature 静态启动模式是我不久前添加到 demo4 代码中的,但一直没来得及解释,所以我现在要做。 正如我以前提到的,我总是喜欢在第一次打开接收器后让接收机静止不动,以便在允许它移动之前获…

svn和git的使用杂谈

笔者毕业的4年一直都是使用svn,直到前面几个月换了工作,新单位用的git,愣是用了1-2个月的时间才缓过来;下面是笔者关于这两款代码管理工具使用的一点经验。 svn svn:使用简单,入门容易,就只有本地代码和远…

jenkins部署springboot项目

jenkins部署springboot项目 1、创建一个项目 上传到gitee 1、创建项目 2、上传到git 2、jenkins创建一个pipeline项目 Pipeline简介 1)概念 Pipeline,简单来说,一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者…

Markdown(6):段落缩进

Markdown 段落缩进 \qquad Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸收了很多在…

SSL证书中的对称加密是什么?有哪些算法

SSL证书中的对称加密是一种加密类型,它使用相同的密钥来加密和解密数据。发送者和接收者都具有相同的密钥副本,它们是秘密的,不会与任何人共享。这与非对称加密不同,后者使用两个密钥-一个公共密钥(任何人都可以访问&a…

CSS_calc() 函数内部怎么使用scss变量

使用 calc() 函数来计算主体元素的宽度,其中通过 #{} 语法将 SCSS 变量转换为 CSS 变量,然后使用加法运算符 和乘法运算符 * 来计算宽度值 $main-width: 100px; $main-padding: 10px;.main {width: calc(#{$main-width} #{$main-padding} * 2); }