2014-07-16 18 views
0

我得到了java.net.BindException。我使用Spring自動裝載所有bean,所以我不認爲同一進程的兩個線程正在運行。我也爲所有進程使用不同的端口。Spring中的java.net.BindException

什麼可能是這個錯誤的可能原因?有什麼方法可以檢查原因嗎?

11:13:48,350 WARN [pool-2-thread-3] Service:215 - Thread exiting main loop due to exception: 
    java.lang.RuntimeException: java.net.BindException: Address already in use: JVM_Bind 
     at ca.uhn.hl7v2.app.AcceptorThread.afterStartup(AcceptorThread.java:106) 
     at ca.uhn.hl7v2.concurrent.Service.run(Service.java:202) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
     at java.util.concurrent.FutureTask.run(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 
    Caused by: java.net.BindException: Address already in use: JVM_Bind 
     at java.net.DualStackPlainSocketImpl.bind0(Native Method) 
     at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source) 
     at java.net.AbstractPlainSocketImpl.bind(Unknown Source) 
     at java.net.PlainSocketImpl.bind(Unknown Source) 
     at java.net.ServerSocket.bind(Unknown Source) 
     at java.net.ServerSocket.bind(Unknown Source) 
     at ca.uhn.hl7v2.app.AcceptorThread.afterStartup(AcceptorThread.java:103) 

編輯:我得到了錯誤的來源。我正在使用實現ApplicationListener<ContextRefreshedEvent>的Spring @Component。這個組件在tomcat啓動時運行,但是當我運行單元測試時,它再次運行組件。爲什麼會發生?

下面是引用組件 -

@Component 
public class RunBackgroundServices implements ApplicationListener<ContextRefreshedEvent> { 

    private final BackgroundServices backgroundServices; 

    private ExecutorService executor; 

    @Autowired 
    public RunBackgroundServices(BackgroundServices backgroundServices) { 
     this.backgroundServices= backgroundServices; 
    } 

    @Override 
    public void onApplicationEvent(ContextRefreshedEvent event) { 

     executor = Executors.newSingleThreadExecutor(); 
     executor.submit(backgroundServices); 
    } 

    public void onApplicationEvent(ContextStoppedEvent event) { 
     executor.shutdown(); 
    } 
} 

回答

1

什麼是使用you're端口?看起來像你阻止那個端口,你不會釋放它。

試試這個。

 Linux: netstat -lpn | grep "your port" Then with the pid. kill -9 pid 

    Mac: lsof -i tcp:"your port" Then with the pid. kill -9 pid 
+0

如果您發出後決心記得標記爲完成。 – paul

相關問題