2016-03-31 6 views
0

と「はBindException、すでに使用中のアドレスは、」私は、Apache FTPSERVERを構成しました。:次のように春のApache FTPSERVER

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = MainApplication.class) 
@WebIntegrationTest 
public class ApplicationTestX { 
... 
} 

私はテストを個別に実行すると成功します。しかし、それらを一緒に実行すると、私はjava.net.BindException: Address already in use: bindを取得します。どうすればそれを避けることができますか?

+0

あなたFtpDummyServerの範囲は何ですか?私はすべてのテストケースに対して1つのFtpDummyServerを共有しようとすると、FtpDummyServerを何度もテストに注入すると思います。 –

+0

FtpDummyServerには@Componentアノテーションがあります。これはdfaultあたりのシングルトンです。 –

+0

あなたのテストケースを投稿できますか? –

答えて

2

各テストでは、FtpDummyServerが作成されます。しかし、@PreDestroyは決して呼び出されませんでした。 @DirtiesContextは問題を解決します。

2

例外スタックトレースを見ると、ftpサーバーが使用しようとしているアドレスがわかります。 org.apache.ftpserver.FtpServerConfigurationException:なめらかによって引き起こさ

のようにそれは起こるかもしれない設定にチェックし、0.0.0.0/0.0.0.0:21に対処するために

をバインドできませんでした。理由:

  1. あなたのアプリの別のインスタンスはアドレスを使用します。そうであれば、それらを終了する必要があります。
  2. 他のプロセスでは、アドレス/ポートを使用します。この場合、別のアドレスにバインドするようにftpサーバを再設定することができます。

    FtpServerFactory serverFactory = new FtpServerFactory(); 
    
    ListenerFactory factory = new ListenerFactory(); 
    factory.setPort(2222); //use alternative port instead of default 21 
    serverFactory.addListener("default", factory.createListener()); 
    
    server = serverFactory.createServer(); 
    server.start(); 
    

アドレスを保持しているプロセスIDを把握するには、netstatを使用します。

+0

各テストごとに、FtpDummyServerが作成されます。しかし、 '@ PreDestroy'は決して呼び出されませんでした。 '@DirtiesContext'は問題を解決します。 –

+0

@RenéWinkler私は何とかそれがテストだったことを逃した – Evgeny

0

@TestExecutionListenersで@DirtiesContextを使用すると動作しますが、コンテキストをデフォルトのコンテキストにマージするのを忘れてしまいます。 は、例えば:

@RunWith(SpringJUnit4ClassRunner.class) 
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) 
@TestExecutionListeners(value = {DirtiesContextTestExecutionListener.class}, mergeMode = MergeMode.MERGE_WITH_DEFAULTS) 
@SpringApplicationConfiguration(classes = MainApplication.class) 
@WebIntegrationTest 
public class ApplicationTestX { 
... 
} 

が見てください:Does Spring @DirtiesContext reload Spring context?

関連する問題