2017-08-16 11 views
1

私が埋め込まれモンゴ&カフカと春ブーツ用のセットアップにJUnitテストをしようとしています: -春ブーツ:要求されたアドレスを割り当てることができません:JVM_Bind

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, 
     classes = {AccountingApplication.class}) 
@DataMongoTest 
public class BaseEmbeddedTest { 


    @ClassRule 
    public static KafkaEmbedded embeddedKafka = new KafkaEmbedded(1, true); 

    @Autowired 
    private MongoTemplate mongoTemplate; 


    @Test 
    public void emptyTest(){ 

    } 

} 

のsrc /テスト/リソース/アプリケーション.yml: -

spring: 
    data: 
    mongodb: 
     port: 0 
    kafka: 
    bootstrap-servers: ${spring.embedded.kafka.brokers} 

PROBLEM

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [de.flapdoodle.embed.mongo.config.IMongodConfig]: Factory method 'embeddedMongoConfiguration' threw exception; nested exception is java.net.BindException: Cannot assign requested address: JVM_Bind 
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) 
    ... 140 more 
Caused by: java.net.BindException: Cannot assign requested address: JVM_Bind 
    at java.net.DualStackPlainSocketImpl.bind0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) 
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) 
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190) 
    at java.net.ServerSocket.bind(ServerSocket.java:375) 
    at java.net.ServerSocket.<init>(ServerSocket.java:237) 
    at de.flapdoodle.embed.process.runtime.Network.getFreeServerPort(Network.java:80) 
    at org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration.embeddedMongoConfiguration(EmbeddedMongoAutoConfiguration.java:147) 

私はここで間違っていますか?

バージョン: -

dependencyManagementPluginVersion = '1.0.3.RELEASE' 
    springBootVersion = '1.5.6.RELEASE' 
    springCloudVersion = 'Dalston.SR2' 
    projectVersion = '0.0.1-SNAPSHOT' 
    javaVersion = 1.8 
    kotlinVersion = '1.1.4' 

答えて

1

この注釈:春ブーツが埋め込まMongoのインスタンスを作成する原因となる@DataMongoTest。例外メッセージは、実行しようとしているポート上ですでにプロセスが実行されているため、埋め込みMongoインスタンスが起動できないことを示しています。

埋め込まMongoのインスタンスがEmbeddedMongoAutoConfigurationによって構成されており、春ブーツによって適用戦略 - ポート割り当てのためには - 以下の通りである。だから、

if configured Mongo port > 0 then 
    use the configured port 
else 
    assign a random port 
end 

、私はあなたのテストのコンテキストが非ゼロ値に設定されていることを疑いますspring.data.mongodb.portです。私はあなたがspring.data.mongodb.portにゼロの値を正しく割り当てていることを意味するapplication.ymlを投稿したことを知っていますが、EmbeddedMongoAutoConfigurationコンストラクタの中にブレークポイントを置き、プロパティパラメータ内を覗くと、その構成クラスはゼロではありません。 EmbeddedMongoAutoConfigurationに渡されたポートの値が実際に0であるにもかかわらず、まだJVM_Bindエラーが発生している場合は、Network.getFreeServerPort(this.getHost())は空きポートを返していないため、このコールは発生していない可能性があります。

spring.data.mongodb.port=0でテストコンテキストを設定している限り、埋め込まれたMongoインスタンスにはランダムポートが割り当てられ、このランダムポートはSpringコンテキストの他の側面(たとえばあなたのMongoTemplate)は、そのMongoインスタンスと話す必要があります。

関連する問題