Listener中使用Spring注解失败,空指针

在Web项目启动时,为实现初始化操作,如将数据库数据存入Redis,作者遇到了Listener中使用Spring注解失败导致的空指针异常。问题源于Listener由Servlet容器而非Spring容器管理,导致@Autowired注解无效。解决方案是利用WebApplicationContextUtils获取Spring容器引用,确保在Listener初始化时Spring对象已加载。但需注意Listener的加载顺序,需要在web.xml中先配置初始化Spring容器的Listener,再配置自定义Listener。在Web Server容器内的Servlet、Filter和Listener都不是Spring管理的,不能直接使用Spring注解注入对象。
摘要由CSDN通过智能技术生成

自己踩坑

  在做web项目时,我们有时候需要在项目启动的时候需要做一些初始化的操作,例如:读取数据库数据放入redis缓存中,自己就是在这个地方碰到了问题,主要是自己对tomcat容器中的结构不熟悉,当时找了很多资料才解决了。

  先看代码

public class LoadDbToRedisListener extends ContextLoaderListener {

    @Autowired
    private LoadDbToRedisService loadToRedisService;

    /** 日志 */
    private static final Logger LOG = LoggerFactory.getLogger(LoadDbToRedisListener.class);
    /**
     * 重写ContextLoaderListener的contextInitialized方法
     * @param event 事件
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        super.contextInitialized(event);

        try {
           
            loadToRedisService.loadCodesToRedis();
        }catch (Exception e){
            LOG.info("数据库载入缓存失败" + e.toString());
        }
    }
}

  一开始我使用了上面的代码,但是执行不成功数据存人redis失败,deb

使用 KafkaListener 注解可以让 Spring Boot 应用轻松地消费 Kafka 消息。 步骤如下: 1. 引入 spring-kafka 依赖。 ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.2.2.RELEASE</version> </dependency> ``` 2. 在 Spring Boot 应用的配置文件配置 Kafka 生产者和消费者的相关信息。 ```yaml spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer ``` 3. 创建一个 Kafka 消费者,定义一个方法用于处理消息。 ```java @Component public class KafkaConsumer { @KafkaListener(topics = "my-topic", groupId = "my-group") public void receive(String message) { System.out.println("Received message: " + message); } } ``` 4. 创建一个 Kafka 生产者,发送消息。 ```java @Component public class KafkaProducer { @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void send(String message) { kafkaTemplate.send("my-topic", message); } } ``` 5. 在任何需要发送消息的地方注入 KafkaProducer,调用 send 方法发送消息即可。 ```java @Autowired private KafkaProducer kafkaProducer; public void sendMessage() { kafkaProducer.send("hello, kafka"); } ``` 以上就是使用 spring-kafka 的 KafkaListener 注解的基本使用方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值