2017-10-23 13 views
2

私はSpringプロジェクトとMongoRepositoryを持っています。 MongoRepositoryは、JPAと同様、MongoRepositoryを拡張するインタフェースです。春のMongoRepositoryは、どこに例外をキャッチする?

mvn clean installでプロジェクトをビルドしようとすると、Springを1回実行します。 SpringはJenkinsサーバ上で動作していないMongoDBへの接続を試みます。

例外= {com.mongodb.MongoSocketOpenException:例外開口ソケット}によって引き起こされる、{java.net.ConnectException:接続が拒否されました:接続}

例外をキャッチする方法はありますか?これらのメソッドは実行されないので、私がリポジトリと呼ぶサービスではキャッチできません。私はそれが@autowireと関係があると思いますが、例外を捕捉する方法を理解できません。

アーキテクチャ:

application 
    - resource (api) 
    - service 
    - repository extends MongoRepository 

アプリケーションプロジェクトをスキャンし、リソースがサービスを呼び出して、サービスは、リポジトリを呼び出し、それがMongoDBのに接続できないため、リポジトリでエラーが発生します。

リポジトリ:

public interface MetingRepository extends MongoRepository<Meting, String> { 
    Page<Meting> findAllByRuimteId(String ruimteId, Pageable page); 
} 

サービス:

@Service("metingenService") 
public class MetingServiceImpl implements MetingService { 

    // could I try-catch this? 
    @Autowired 
    private MetingRepository metingRepository; 

    @Override 
    public Meting addMeting(Meting meting) { 
     // try-catch does not solve the issue here 
     return metingRepository.save(meting); 
    } 
    } 
} 

私は、自動的に生成されているだけテスト

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class MetingenServiceApplicationTests { 

    @Test 
    public void contextLoads() { 

    } 

} 

スタックトレース:

org.springframework.beans.factory.UnsatisfiedDependencyException:エラー名でBeanを作成する 'metingResource':不満依存関係がフィールドを通して表現 'metingService';ネストされた例外はorg.springframework.beans.factory.UnsatisfiedDependencyExceptionです: 'metingenService'という名前のBeanの作成中にエラーが発生しました:フィールド 'metingRepository'で表現されている満足度の低い依存関係。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:名前 'metingRepository'を持つBeanの作成中にエラーが発生しました:beanプロパティ 'mongoOperations'を設定している間に、 'mongoTemplate'への参照を解決できません。ネストされた例外はorg.springframework.beans.factory.BeanCreationExceptionです:クラスパスresource [org/springframework/boot/autoconfigure/data/mongo/MongoDataAutoConfiguration.class]で定義された 'mongoTemplate'という名前のBeanを作成中にエラーが発生しました: ;ネストされた例外はorg.springframework.beans.BeanInstantiationExceptionです:[org.springframework.data.mongodb.core.MongoTemplate]のインスタンス化に失敗しました:ファクトリメソッド 'mongoTemplate'が例外をスローしました。ネストされた例外はorg.springframework.dao.DataAccessResourceFailureExceptionです:WritableServerSelectorと一致するサーバーを待機している間に30000ミリ秒後にタイムアウトしました。クラスター状態のクライアントビューは、{java.net.net}によって引き起こされる{type = UNKNOWN、servers = [{address = localhost:27017、type = UNKNOWN、state = CONNECTING、exception = {com.mongodb.MongoSocketOpenException:Exception opening socket}です。 ConnectException:接続が拒否されました:接続}}];ネストされた例外はcom.mongodb.MongoTimeoutExceptionです:WritableServerSelectorと一致するサーバーを待機している間に30000ミリ秒後にタイムアウトしました。クラスター状態のクライアントビューは、{java.net.net}によって引き起こされる{type = UNKNOWN、servers = [{address = localhost:27017、type = UNKNOWN、state = CONNECTING、exception = {com.mongodb.MongoSocketOpenException:Exception opening socket}です。ConnectException:接続が拒否されました:接続}}]

+0

ほとんどの場合、あなたは@SpringBootTestsは、(統合テストのためである)、代わりに、あなたは、通常のJUnitテストを行うことができます使用しないでください(required = false) – Noixes

+0

@noixesはrequired = falseであっても、 'mvn package'はリポジトリを実行して接続しようとします。なぜなら、私が知る限り、それらの例外をキャッチすることはできないからです。 – Randy

+0

mongodbサービスに到達できないのはなぜですか? – Noixes

答えて

1

ユニットテストが完全なSpringコンテキストをロードしようとしています。したがって、有効なMongoTemplateをロードしてMongoDBインスタンスに接続しようとしています。あなたは@Autowiredを使用することができますautowireこのレポをオプションにしたい場合は

@RunWith(JUnit4.class) // or @RunWith(MockitoJUnitRunner.class) 
public class MetingenServiceApplicationTests { 
    ... 
}