2017-01-10 5 views
0

を使用する場合に失敗。春ブーツ1.5 @JdbcTest私は春ブーツ1.5.0.RC1に新しい@JdbcTestアノテーションを使用しようとしているユーレカディスカバリー

私のアプリは、私がしようとしたとき、私は私のメインの春のブートクラス

compile('org.springframework.cloud:spring-cloud-starter-eureka')私のbuild.gradleで

@EnableDiscoveryClient

を持っているユーレカ・ディスカバリーすなわちを使用しています@ JdbcTestを使用してJdbcTemplateベースのDAOをテストするこのエラーが発生する:

*************************** 
APPLICATION FAILED TO START 
*************************** 

Description: 

Parameter 0 of method eurekaHealthIndicator in org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration$EurekaHealthIndicatorConfiguration required a bean of type 'com.netflix.discovery.EurekaClient' that could not be found. 


Action: 

Consider defining a bean of type 'com.netflix.discovery.EurekaClient' in your configuration. 

自動設定では、ユーレカ設定の一部がJDBC関連のBeanのみを読み込む必要があるようです。

私がテストに

@TestPropertySource(properties={"eureka.client.enabled=false"})

を追加した場合、問題は消えるが、私は@JdbcTestが唯一の関連Beanがロードされていることをすでに確認してされるべきだと思います。

は、私が何かをしないのですか、これは多分新しい@JdbcTest、または春クラウドユーレカに問題がありますか?

+0

を以下のように追加することで、固定は、テスト用の小道具に、これらのオプションを追加してください: 'eureka.client.register-で、ユーレカ= 'false'と' eureka.client.fetch-registry = false'と 'endpoints.health.enabled = false'を返します。 – Strelok

+0

eureka.client.enabled = falseを追加すると動作します。しかし、@ JdbcTestの考え方は、アプリケーションのJDBCレイヤーにのみ関係するということです。私は全体のアプリケーションで余分な依存関係が問題を引き起こしているか、それらをオフにする方法を開始する必要はありません。 –

答えて

1

あなた@SpringBootApplicationは、その上に@ EnableDiscoveryClientを持っています。スライス注釈(@JdbcTestなど)を使用すると、Springブートは、@SpringBootConfigurationのテストのパッケージを見て、使用するコンテキストを見つけます。見つからない場合は、親パッケージなどを調べます。分かりやすいパッケージ構造で、さらにカスタマイズする必要がない場合は、@SpringBootApplicationをルートコンテキストとして使用します。

ので、その設定クラス(とのみ1つは)@EnableDiscoveryClientも明らかに処理されて処理されます。あなたのケースでは、これにはもう一つの副作用があります。すべての単一のテストでユーレカクライアントが必要になります。

TL;DRは、アプリケーション上で、このような注釈を入れることはありません。あなたが実際にそれを必要とするならば、それを置くだけです。それらのためにSpringブートアプリケーションの隣に@Configurationクラスを定義することができます。

+0

「は、アプリケーション上で、このような注釈をつけたことがない」 - これは私にとって新しいもので、ほとんど例がhttps://spring.io/guides/gs/service-registration-and-discoveryとの「クイックスタート」を含むこれを行うように見えますhttp://cloud.spring.io/spring-cloud-netflix/、なぜ私はあなたがこれをしてはいけないのか分かりません(そして、私がそれを必要としない限り、私は注釈を持っていません!)。 私は注釈を移動することができますが、テストスライス機能の実装に合うように、実際にコア設定を動かしているようです。 –

+0

私はスライスの文脈でそれを言った。テストであなたのアプリをソースとして使用したくない場合は、専用の '@ SpringBootConfiguration'を作成してください。ステップを取り戻そうとすると、両方の方法を取ることはできません。 –

1

@デビッド 私は同様の問題を持っていたし、私のapplication.ymlファイルに

eureka: 
    client: 
    enabled: false 
関連する問題