首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring中的java.net.BindException

Spring中的java.net.BindException
EN

Stack Overflow用户
提问于 2014-07-16 14:02:07
回答 1查看 373关注 0票数 0

我去叫java.net.BindException。我使用Spring自动绑定所有bean,所以我不认为同一进程的两个线程正在运行。另外,我对所有进程使用不同的端口。

此错误的可能原因是什么?有没有办法检查原因?

代码语言:javascript
复制
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启动时运行,但当我运行单元测试时,它会再次运行该组件。为什么会发生这种情况?

下面是供参考的组件:

代码语言:javascript
复制
@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();
     }
}
EN

回答 1

Stack Overflow用户

发布于 2014-07-16 15:49:34

你使用的端口是什么?看起来你阻止了那个端口,但是你没有释放它。

尝尝这个。

代码语言:javascript
复制
     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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24773287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档