SpringBoot 自动注入与多线程

springboot启动项目自动运行测试方法 springboot启动项目自动运行测试方法 实现方式 在xxxx包下创建一个类xxxxx.java,该类需要继承ApplicationRunner接口并实现里面的run方法,并将该类通过@Component 注入到spring里, 源码如下: package com.gitee.taven.test; import org.slf4j.Logger; import org.slf4j.Logg... 阅读详情

       在SpringBoot中可以通过传统的集成Thread或者实现Runnable接口实现多线程,也可以使用SpringBoot中的提供的@Async注解来实现多线程。使用不当都会出现自动注入的失败或者异常报错从而影响功能实现。下面对在SpringBoot中的多线程实现的两种方式做一个记录。

1.集成Thread或实现Runnable接口来实现多线程

      一搜类似标题网上都是说多线程下不能自动注入,需要一个实现ApplicationContextAware的工具类来从spring容器中获取线程中需要的bean,然后在线程的构造方法中完成赋值相当于注入。我就有些纳闷,你不用spring注入的线程对象当然不能自动注入线程内的对象了。为什么不用获取上下文中bean的工具类去获取线程对象呢?感觉这才更加合理。

      所以我觉得正确的操作应该是,用

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

两个注解来修饰线程,让这个线程成为原型模式,成为原型模式的线程,在每次注入或者从spring上下文环境中获取对象时都会新建对象并返回。于是

//文件创建的线程已修改为原型模式此处注入两个
@Autowired
CreateFileQueue createFileQueue;
@Autowired
CreateFileQueue createFileQueue2;

这样就有了两个对象,

//启动文件新建的线程
Thread threadCreate=createFileQueue;
Thread threadCreate2=createFileQueue2;
threadCreate.start();
threadCreate2.start();

 

这样就启动了两个可以自动注入的线程。非常合乎逻辑。

 

若线程更多。可以用for循环从Spring上下文中获取:

利用 实现ApplicationContextAware接口 的工具类来操作Spring的上下文环境获取Spring管理的Bean实例,在用Scope限定为原型模式的bean对象,每次获取都是是个新的对象。

具体代码可参考:

https://www.jianshu.com/p/3cd2d4e73eb7

转载于简书大佬。

 

2.通过SpringBoot自带的@Async注解来实现多线程

@Async注解是springBoot

 

 

详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决 主要介绍了详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

相关推荐

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 426

Spring Boot教程十六:SpringBoot注入类实现多线程

在使用springboot框架开发的过程中,难免也会用到多线程业务处理的需求,如果是普通的类实现多线程,那使用我们上一篇文章中的方法就足够了。但是大部分的使用环境是是我们需要将一个注入容器的实例类实现多线程,比如业务中要操作数据库调用其他方法等都难免要引用其他的实例。但是spring中的实例默认是单例的,针对这种情况我们应该怎么实现多线程呢,下面给大家用demo详细解释一下:     在spri...

王树钰的博客 1万+

1.47寸ST7789V3彩屏硬件设计与驱动调试指南

TFT LCD是一种基于薄膜晶体管阵列控制像素明暗的主动式显示技术,其核心依赖于专用驱动IC(如ST7789V3)完成时序生成、GRAM管理与伽马校正。该类小尺寸彩色显示屏广泛应用于嵌入式HMI、IoT终端与可穿戴设备,具备高PPI、低功耗和SPI接口易集成等工程优势。理解RGB565数据格式、SPI Mode 0通信时序及关键寄存器(如0x36方向控制、0x3A像素格式、0x2A/0x2B地址窗口)是实现稳定显示的基础;而正确处理电源设计(严禁5V直供)、复位时序与背光PWM调光,则直接决定系统可靠性与能

weixin_30995917的博客 166

【JUC】SpringBoot使用线程池的两种方式 注解和注入

【JUC】SpringBoot使用线程池的两种方式 注解和注入

lushixuan12345的博客 2842

信号完整性仿真SI之Cadence Sigrity SPEED2000_眼图仿真(四)

今天给大家分享一个仿真的操作流程,是关于Cadence Sigrity SPEED2000的时域波形仿真和眼图仿真。我们会经常看见硬件工程师调试示波器上的一些信号的波形变化,其实这些也可以通过仿真电路的搭建来做出投板前的仿真,来优化走线,以减少版本的迭代次数。如果要和实际的信号保持一致,就要求仿真设置的参数和实际的参数保持一致,这也是仿真的重点和难点。下面先让我们了解一下Cadence Sigrity SPEED2000时域仿真的操作流程: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的

刘小同学的博客 1万+

【点云语义分割】Ubuntu20.04下RangeNet++环境配置与实战指南

本文详细介绍了在Ubuntu20.04系统下配置和运行RangeNet++点云语义分割模型的完整实战指南。内容涵盖从Cuda、cudnn到TensorRT的深度学习环境搭建,RangeNet++源码编译的详细步骤与常见问题解决,以及如何运行首个分割Demo并可视化结果。最后,还探讨了处理自定义点云数据格式和进行性能调优的进阶技巧,旨在帮助开发者和研究者快速部署并应用这一先进的点云语义分割技术。

rnn9storyteller的博客 516

Spring在Thread中注入Bean无效的解决方式[嗡汤圆的小笔记]

在Spring项目中,有时需要新开线程完成一些复杂任务,而线程中可能需要注入一些服务。而通过Spring注入来管理和使用服务是较为合理的方式。但是若直接在Thread子类中通过注解方式注入Bean是无效的。因为Spring本身默认Bean为单例模式构建,同时是非线程安全的,因此禁止了在Thread子类中的注入行为,因此在Thread中直接注入的bean是null的,会发生空指针错误。以下分别列举错误

嗡汤圆的博客 1万+

Windows下用Caddy一键搞定LiveKit本地HTTPS部署(含自签名证书避坑指南)

本文详细介绍了在Windows本地开发环境中,如何利用Caddy服务器一键部署支持HTTPS和WSS的LiveKit实时通信服务。文章重点解决了自签名证书的生成与配置难题,提供了完整的避坑指南和防火墙设置,帮助开发者快速搭建安全的WebRTC测试环境,实现局域网内的实时音视频互动。

weixin_29274969的博客 584

SpringBoot项目如何在线程中注入某个Bean

线程是安全的,线程中不能够直接注入bean,会直接报空指针错误。 解决方案: 1.创建一个工具类,直接粘贴到文件里就可以 import org.springframework.beans.BeansException; import org.springframework.cont...

小猿啊啊啊的博客 1303

ardupilot开发 --- Remote ID 篇

适配ardupilot的Remote ID模块研发,远程标识模块研发。Remote ID模块可以通过蓝牙或wifi向外广播无人机的状态信息、位置信息、任务信息等,并可以通过蜂窝数据向国家无人驾驶航空器一体化综合监管服务平台上报这些信息。Remote ID功能是21年起国家出台的民用无人机适航飞行的基本要求!

记录老板的每次pua,分享领导每天的毒鸡汤... 9607

税务某局 webpack 登录接口逆向分析

我们再回到接口逻辑去看一下,发现每次请求前,还有两个接口,getpublickey和sendsm4,这里分析了一下调用逻辑,sm4这个接口用到一个参数是由publickey返回的一个参数而来,这个参数又经过内部加密处理,我们找到这个参数加密的地方,大概是在这个位置。我们还是顺着逻辑将加载器扣下来,然后用一个变量去接收,有了加载器,我们直接把加密代码扣下来做下处理,把一些用到的参数整理下如下。打上断点分析后,_utils_getuuid这个很长的变量也是加载器的一个函数,我们将这段代码也扣下来,如下。

码王吴彦祖的博客 403

技术笔记:多线程(Runnable)类或者是监听器中使用Autowired自动注入出现null的问题

一、原因分析: 在多线程时使用@Autowired总是获取不到bean,原因是:new thread不在spring容器中,也就无法获得spring中的bean对象 二、解决方案: 手动获取 代码实现如下: package com.test.configs; import org.springframework.beans.BeansException; import ...

堂前燕的博客 2762

18、知识表示与学习范式

本文探讨了智能系统中的核心组成部分——知识表示与学习范式。从基础知识到实际应用,详细解析了符号表示、框架表示、语义网络和本体表示等知识表示方法,并介绍了监督学习、无监督学习、半监督学习和强化学习等学习范式。此外,还深入分析了这些技术在自然语言处理、图像识别和推荐系统等领域的具体应用及操作步骤。最后,展望了未来可能的技术发展方向。

ttt77的博客 85

使用springboot2多线程,线程类无法实现自动注入需要的bean

1、情况描述 使用springboot2多线程,线程类无法实现自动注入需要的bean,解决思路,通过工具类获取需要的bean 如下 package com.ps.uzkefu.apps.ctilink.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.ps.uzkefu.apps.callcenter...

lixixi 1768

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Springboot实现多线程注入bean的工具类

场景: 使用springboot多线程,线程类无法自动注入需要的bean, 解决方法: 通过工具类获取需要的bean 工具类代码: import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.con...

木木 2959

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SpringBoot 自动注入TaskExecutor taskExecutor失败

SpringBoot 自动注入TaskExecutor taskExecutor失败 需要自动注入失败 Description: Field taskExecutor in com.sbmbp.download.DownloadManage required a bean of type ‘org.springframework.core.task.TaskExecutor’ that could not be found. The injection point has the following an

J82stu的博客 3553

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java多线程访问beans对象_springboot在多线程中注入对象

springboot多线程,线程类无法实现自动注入需要的bean,可以通过工具类获取需要的bean@Componentpublic class ApplicationContextProvider implements ApplicationContextAware {/*** 上下文对象实例*/private static ApplicationContext applicationContex...

weixin_39960147的博客 296

SpringBoot获取Request的3种方法!

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)HttpServletRequest 简称 Request,它是一个 Servlet API 提供的对象,用于获取客户端发起的 HTTP 请求信息。例如:获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。那么问题来了,在 Spring Boot 中,...

磊哥聊Java 1316

SpringBoot有几种获取Request对象的方法

Springboot获取 HttpServletRequest 对象的方法有哪些?常见的获取 Request 对象的方法有以下三种:通过请求参数中获取 Request 对象;通过 RequestContextHolder 获取 Request 对象;

lzq2357639195的博客 1482

springboot2 多线程写入数据_解决SpringBoot2多线程无法注入的问题

1、情况描述使用springboot2多线程,线程类无法实现自动注入需要的bean,解决思路,通过工具类获取需要的bean如下package com.ps.uzkefu.apps.ctilink.handler;import com.baomidou.mybatisplus.mapper.EntityWrapper;import com.ps.uzkefu.apps.callcenter.enti...

weixin_39962356的博客 540

java多线程访问beans对象_Springboot实现多线程注入bean的工具类操作

场景: 使用springboot多线程,线程类无法自动注入需要的bean解决方法:通过工具类获取需要的bean工具类代码:import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.Ap...

weixin_39576270的博客 570

SpringBoot @Autowired 注解 无法自动注入

1不在启动类application所在包及其子包的类 这个可以在application中通过@ComponentScan加入 @Slf4j @SpringBootApplication @ComponentScan(basePackages = {"com.vmos.consumer", "com.vmos.common"}) public class KafkaConsumerApplication { public static void main(String[] args) {

qq_34331601的博客 516

SpringBoot2多线程无法注入问题

1、情况描述使用springboot2多线程,线程类无法实现自动注入需要的bean,解决思路,通过工具类获取需要的bean如下package com.ps.uzkefu.apps.ctilink.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.ps.uzkefu.apps.callcenter.e...

zsj777的专栏 4205
上一篇: 反射实现自动封装javaBean
下一篇: idea配置tomcat,Loader delegate、Libraries、以及Dependencies
终极大叉哥
博客等级 码龄12年 0粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值