首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring对多线程的支持

最近的项目中有个问题是处理从ERP上传商品到电商慢的问题,之前的操作是ERP先上传对应的商品的图片到电商服务器,然后上传商品信息到电商数据库,这样存在一个问题,ERP上传图片到电商服务器速度很慢,因为要跨外网,改进的做法是,ERP先将商品信息上传到电商数据库,商品信息中包含有图片的绝对路径,图片的处理交由电商这边去上传,返回图片上传的地址,写到对应的表,这里想到的是用多线程去处理图片上传,好了,开始干活。

在商品信息保存完成后,开启一个线程

ImageThread imageThread =newImageThread(commonId);imageThread.start();

ImageThread线程类继承Thread,重写run方法,在run方法里面处理图片上传和写相关数据信息,在ImageThread类里面使用注解@Autowired注入了很多Dao,因为这里要查数据和写数据,写完相关逻辑后,开始愉快的跑起来。

打开Postman开始调用接口,好嘞,商品上传完成,返回commonId,多线程进入到ImageThread类里面,调试发现注入的Dao全为null,以为是配置文件没开启注解扫描,类没写@Component注解等错误,都检查了一遍,发现没错,回过头来看了下开线程的方法,开启线程使用了new,可是项目是使用spring来管理对象的啊,这里竟然用了new来创建对象,GG,如果用new创建对象那还要spring干什么用。于是开始搜索spring多线程处理,原来spring对多线程的支持很简单,直接贴代码吧。

定义配置类:

写要执行的任务:

直接调用:

完成。

出现这个为空的问题还是因为自己对spring的对象管理理解不够透彻,使用spring注解注入取不到值主要有以下几种情况:

注解扫描没有扫描到对应的包

类上没有加上相应的注解,例如:@Component,@Service,@Controller

使用了new创建对象

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180608G0M3QF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券