Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 除非处于调试模式,否则新线程中的Autowired@Resource从未接触过_Java_Spring_Multithreading_Rest_Spring Boot - Fatal编程技术网

Java 除非处于调试模式,否则新线程中的Autowired@Resource从未接触过

Java 除非处于调试模式,否则新线程中的Autowired@Resource从未接触过,java,spring,multithreading,rest,spring-boot,Java,Spring,Multithreading,Rest,Spring Boot,我正在编写一个SpringBoot应用程序,它的前端有一个REST控制器。当我调用控制器时,它会在队列中插入一个名称。下面的处理器检查incomingQueue,并使用队列中的最新名称对数据库执行操作 这就是我完全被难倒的地方。当我在eclipse中处于调试模式时,我的代码可以工作,但是当我简单地运行应用程序时,下面的代码永远不会触及队列。行System.out.println(name+”已从队列中删除。队列大小现在为:“+incomingQueue.size()”)没有输出一直被调用 有什么

我正在编写一个SpringBoot应用程序,它的前端有一个REST控制器。当我调用控制器时,它会在队列中插入一个名称。下面的处理器检查
incomingQueue
,并使用队列中的最新名称对数据库执行操作

这就是我完全被难倒的地方。当我在eclipse中处于调试模式时,我的代码可以工作,但是当我简单地运行应用程序时,下面的代码永远不会触及队列。行
System.out.println(name+”已从队列中删除。队列大小现在为:“+incomingQueue.size()”)没有输出一直被调用

有什么建议吗

休息控制器:

@Resource
Queue<String> incomingQueue;

@RequestMapping(value="/simpleAction",method=RequestMethod.GET)
public @ResponseBody int queueName(@RequestParam(value="name", required=true) String name) throws RiotApiException {
    incomingQueue.add(name);
    return incomingQueue.size();
}
@Component
public class RequestProcessor implements Runnable {

@Resource
Queue<String> incomingQueue;

@Autowired
private WebApplicationContext context;

public SimpleAction getSimpleAction() {
    return (SimpleAction) context.getBean("simpleAction");
}


public void run(){
    System.out.println("Spawning Request Processor");

    while (true) {
        if (!incomingQueue.isEmpty()) {
            String name = incomingQueue.remove();
            System.out.println(name + " removed from queue. Queue size now: " + incomingQueue.size());
            new Thread(new Runnable() {
                 public void run() {
                     getSimpleAction().performAction(name);
                 }
            }).start();
        }
    }
  }
}

是否确定getSimpleAction().performAction(名称);也没有调用或只是sysout,可能是您的记录器设置设置为仅在调试sysout中打印。你能检查一下吗?我的上帝@gladiator看起来像是在运行,但我切换到了log4j框架,现在一切都在打印。这是一个愚蠢的错误,但感谢您提供的解决方案。您确定getSimpleAction().performAction(名称);也没有调用或只是sysout,可能是您的记录器设置设置为仅在调试sysout中打印。你能检查一下吗?我的上帝@gladiator看起来像是在运行,但我切换到了log4j框架,现在一切都在打印。这是个愚蠢的错误,但谢谢你的解决方案。
@Component
public class ApplicationLoader implements CommandLineRunner {

    @Autowired
    RequestProcessor requestProcessor;

    @Override
    public void run(String... strings) throws Exception {

        new Thread(requestProcessor).start();
    }
}