本文主要是介绍bean作用域为singleton(单例模式)引起多线程安全问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
华为云OBS整合了Ueditor,但是在批量上传图片时,只能部分上传成功,很多文件会上传失败,经过分析发现:bean作用域为单例模式时,Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个Bean 引用它,始终指向同一对象,该模式在多线程下是不安全的,特此记录。
错误代码:
@Service
@Slf4j
public class FileServiceImpl implements FileService {@Value("${files.path}")private String filesPath;@Value("${files.prefix}")private String FilesPrefix;@Value("${huaWeiObs.AccessKeyId}")private String AccessKeyId;@Value("${huaWeiObs.AccessKeySecret}")private String AccessKeySecret;@Value("${huaWeiObs.BucketName}")private String BucketName;@Value("${huaWeiObs.Endpoint}")private String Endpoint;@Value("${huaWeiObs.ObsFilesPath}")private String ObsFilesPath;private ObsClient obsClient;@Autowiredprivate FileInfoMapper fileInfoMapper;@Overridepublic FileInfo huaWeiObsUpload(MultipartFile file) {PutObjectResult putObjectResult = null;String md5 = null;try {//验证文件格式String fileOrigName = file.getOriginalFilename();if (!fileOrigName.contains(".")) {throw new IllegalArgumentException("缺少后缀名");}//对文件流进行MD5加密md5 = FileUtil.fileMd5(file.getInputStream());FileInfo fileInfo = fileInfoMapper.ge
这篇关于bean作用域为singleton(单例模式)引起多线程安全问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!