SpringBoot-自定义监听器_springboot 自定义listener

二、利用RedisUtil工具类写入数据

为了在onApplicationEvent方法中使用RedisUtil工具类往Redis里写入数据,我们需要确保RedisUtil类已经存在,并且包含了相关的写入方法。下面是一个简单的示例:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

@Component
public class RedisUtil {

    private final RedisTemplate<String, String> redisTemplate;

    @Autowired
    public RedisUtil(RedisTemplate<String, String> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public void writeDataToRedis() {
        // 在这里编写往Redis里写入数据的逻辑
        redisTemplate.opsForValue().set("key", "value");
    }
}

在上述代码中,RedisUtil类通过@Component注解成为了一个Spring Bean,使得它可以被其他组件自动注入。writeDataToRedis方法可以根据具体需求编写,执行向Redis写入数据的相关逻辑。

通过这样的设计,我们成功创建了一个自定义监听器MyApplicationListener,在特定应用程序事件发生时,它会调用RedisUtil工具类的方法,实现了向Redis写入数据的功能。这种结构既利用了Spring Boot的事件模型,又灵活地整合了自定义逻辑,为应用程序提供了更多的扩展性和定制化的可能性。


三、测试自定义监听器

接下来,我们将进行自定义监听器的测试,确保它在项目加载时能够自动运行并执行相关操作。

1、观察控制台输出

启动项目,并仔细观察控制台输出。若一切配置正确,你应该能够看到与自定义监听器相关的日志信息。这些日志表明监听器在特定应用程序事件发生时被触发,执行了相应的操作。

我们往监听器里添加日志代码:

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        // Spring Boot 应用启动后执行该方法
        System.out.println("Spring Boot 应用启动...");

        // 在这里编写监听到特定应用程序事件时的操作
        // 例如,利用RedisUtil工具类往Redis里写入数据
        RedisUtil.writeDataToRedis();
 
        System.out.println("将数据存入 Redis 中...");
    }
}

启动项目,观察控制台,看到我们的log已经被打出了。

这表示MyApplicationListenerApplicationEvent发生时被触发。

2、检查Redis是否成功存入

接着,我们来进行第二项测试,确保数据已成功存入Redis。我们要通过访问Redis服务,检查相关数据是否已被写入。具体方法我们采用使用命令行工具或可视化工具连接到Redis服务器的形式,检查键值对是否存在。我们在writeDataToRedis方法中写入了键为 “key”、值为 “value” 的数据,应该在Redis中可以看到相应的数据。

我们去访问Reids服务,看内容是否已经被存入Redis,看到已经被存入。输入Keys,获得Redis服务保存的所有键值对,如果成功的话,可以看到我们刚刚存入的<“key”, “value”>键值对的key,也就是字符串"key"。

通过以上两个测试步骤,我们已经验证自定义监听器在按照预期工作。


四、自定义监听器的四种实现方式

在Spring Boot中,我们可以通过不同的方式来自定义监听器。以下是几种常见的方法,以及简单的示例:

1、实现ApplicationListener接口
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class CustomEventListener implements ApplicationListener<ApplicationEvent> {
    
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        // 处理事件逻辑
        System.out.println("Custom Event Received: " + event.toString());
    }
}

2、使用@EventListener注解
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class AnotherCustomEventListener {
    
    @EventListener
    public void handleCustomEvent(CustomEvent customEvent) {
        // 处理事件逻辑
        System.out.println("Another Custom Event Received: " + customEvent.toString());
    }
}

在这个例子中,CustomEvent是自定义的事件类,根据需要定义自己的事件。

3、实现ApplicationEventPublisherAware接口
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Component;

@Component
public class CustomEventPublisher implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher eventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.eventPublisher = applicationEventPublisher;
    }

    public void publishCustomEvent(String message) {
        // 创建并发布自定义事件
        CustomEvent customEvent = new CustomEvent(this, message);
        eventPublisher.publishEvent(customEvent);
    }
}

上述示例中的CustomEvent是一个自定义的事件类,根据实际需求创建。

4、使用@Async注解实现异步监听
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值