Java spring boot应用程序中的多线程问题,问题是什么?

Java spring boot应用程序中的多线程问题,问题是什么?,java,spring,multithreading,spring-boot,Java,Spring,Multithreading,Spring Boot,我有一个spring boot应用程序,在控制器中我有一个注入的服务类,还有一个从线程调用的服务类中的方法。 我的应用程序有一个索引页,用户可以在其中设置值并开始一些计算,设置值发生在该服务类中,要开始计算,用户单击一个按钮将启动控制器中的线程,该控制器调用服务类中的方法。结果将显示在不同的页面中,此页面有一个按钮,可返回到索引页面,以使用不同的值启动ne计算 我需要一个新的注入bean,当我在计算后返回到索引页面时,我猜,如果没有注入bean,我将修改并使用前一个注入bean,这将给我错误的结

我有一个spring boot应用程序,在控制器中我有一个注入的服务类,还有一个从线程调用的服务类中的方法。 我的应用程序有一个索引页,用户可以在其中设置值并开始一些计算,设置值发生在该服务类中,要开始计算,用户单击一个按钮将启动控制器中的线程,该控制器调用服务类中的方法。结果将显示在不同的页面中,此页面有一个按钮,可返回到索引页面,以使用不同的值启动ne计算

我需要一个新的注入bean,当我在计算后返回到索引页面时,我猜,如果没有注入bean,我将修改并使用前一个注入bean,这将给我错误的结果

我的服务类需要什么范围

我尝试了原型,请求和会话,最后两个在运行代码之前给我错误,第一个给我错误的结果

“上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatifiedpendencyException:创建名为'schedulerController'的bean时出错:通过方法'setA'参数0表示的未满足依赖项;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建名为“scheduler”的bean时出错:当前线程的作用域“request”未处于活动状态;如果您想从一个单体引用它,请考虑为这个bean定义一个作用域代理;嵌套异常为java.lang.IllegalStateException:未找到线程绑定请求:您是在实际web请求之外引用请求属性,还是在原始接收线程之外处理请求?如果您实际上在web请求中操作,但仍然收到此消息,则您的代码可能在DispatcherServlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。“

如何解决这个问题

在我的控制器中:

@Autowired
    public void setA(Scheduler schedulerObject) {
        this.schedulerObject = schedulerObject;
    }

    static class thread extends Thread
    {
        public void run()
        {
            try {
                schedulerObject.setRun(true);
                schedulerObject.check();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public void kill() {
            schedulerObject.setRun(false);
        }
    }
控制器中的此方法将开始计算:

static thread x;

@RequestMapping(value="start")
    public String start() throws InterruptedException
    {
        x=new thread();
        x.start();
        Thread.sleep(1*1000);       
        return "index";
    }
在“schedulerObject”中还有其他控制器方法可以进行一些修改,用户最后调用的方法是“start”和“stop”


因此,每次用户返回索引页面时,都需要一个新的“schedulerObject”实例。

您的spring配置中似乎缺少一个
RequestContextListener

@Bean
public RequestContextListener requestContextListener(){
    return new RequestContextListener();
}
没有这个bean,您将无法创建请求范围的bean(请参阅)


同样相关:

您的spring配置中似乎缺少一个
RequestContextListener

@Bean
public RequestContextListener requestContextListener(){
    return new RequestContextListener();
}
没有这个bean,您将无法创建请求范围的bean(请参阅)


同样相关:

我应该将其粘贴到控制器中吗?仅此而已?因为在这种情况下,它不起作用。我得到相同的错误,只是从“错误启动tomcat上下文…”开始。。。“您需要将其添加到Spring配置中。web.xml或java spring配置类。我有pom.xml,如果我粘贴第一个链接中的代码,它会显示错误,我不知道spring配置类是什么,抱歉,但我是spring新手。将它放在名为xxxxApplicationies的springboot主类中,它也应该在主类所在的位置,用@SpringBottApplication注释,该注释包括SpringBootConfiguration。它给了我一个错误:“在上下文初始化期间遇到执行-取消刷新尝试:…”我应该将它粘贴到我的控制器中吗?因为在这种情况下,它不起作用。我得到了相同的错误,只是从“错误启动tomcat上下文…”开始,您需要将其添加到Spring配置中。web.xml或java spring配置类。我有pom.xml,如果我粘贴第一个链接中的代码,它会显示错误,我不知道spring配置类是什么,抱歉,但我是spring新手。将它放在名为xxxxApplicationies的springboot主类中,它也应该在主类所在的位置,用@SpringBottApplication注释,该注释包括SpringBootConfiguration。它给出了一个错误:“在上下文初始化期间遇到执行-取消刷新尝试:…”