gpt4 book ai didi

java - 多线程上传多个文件时面临空指针

转载 作者:行者123 更新时间:2023-12-02 03:52:43 24 4
gpt4 key购买 nike

我正在尝试使用多个线程将多个文件数据上传到数据库。

Controller 层

System.out.println("saveStudent");
for (int i = 1; i < 10; i++)
{
Thread t = new Thread(new FileHandlerClass("test" + i + ".csv"));
t.start();
}
<小时/>
@Component
public class FileHandlerClass
implements Runnable
{
public FileHandlerClass()
{
}

@Autowired
private SpringbootService service;
private String fileName;

public FileHandlerClass(String fileName)
{
System.out.println(fileName);
this.fileName = fileName;
}

@Override
public void run()
{
this.service.saveStudent(this.fileName); // Facing nullpointer exception here
}
}

但是我在以下位置遇到空指针异常this.service.saveStudent(this.fileName); .

Enter image description here

如何修复它?

删除 @Autowired 是有效的,但我不知道为什么它在使用上面的代码时没有初始化 bean。

private SpringbootService service;
private String fileName;

public FileHandlerClass(String fileName, SpringbootService service)
{
System.out.println(fileName);
this.fileName = fileName;
this.service = service;
}

@Override
public void run()
{
service.saveStudent(this.fileName);
}

最佳答案

您的服务未初始化,因为您使用 new 创建了 FileHandlerClass。您已将 FileHandlerClass 注释为 @Component,将服务字段注释为 @Autowired。因此,如果您的 SpringbootService 也是一个组件(服务、存储库......),只需以“spring 方式”实例化 FileHandlerClass 即可,例如,通过使用 ApplicationContext,它将 Autowiring 服务。

还有一件事。 Spring的@Component默认是单例的。因此,如果您想创建多个实例,您应该指向 @Scope,例如:

@Scope("prototype")

有关其工作原理的更多信息,您可以阅读 spring core documentation

关于java - 多线程上传多个文件时面临空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56767890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com