Spring MongoRepository,在哪里捕获异常?

时间:2017-10-23 09:24:42

标签: java spring mongodb maven spring-mongodb

我有一个Spring项目和一个MongoRepository。 MongoRepository是一个扩展MongoRepository的接口,就像JPA一样。

如果我尝试用mvn clean install构建我的项目,它会运行Spring一次。 Spring尝试连接到我的Jenkins服务器上没有运行的MongoDB。

  

exception = {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:创建名为'metingResource'的bean时出错:通过字段'metingService'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为'metingenService'的bean时出错:通过字段'metingRepository'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'metingRepository'的bean时出错:在设置bean属性'mongoOperations'时无法解析对bean'mongoTemplate'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:在类路径资源中定义名为'mongoTemplate'的bean时出错[org / springframework / boot / autoconfigure / data / mongo / MongoDataAutoConfiguration.class]:通过工厂方法进行Bean实例化失败;嵌套异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.springframework.data.mongodb.core.MongoTemplate]:工厂方法'mongoTemplate'抛出异常;嵌套异常是org.springframework.dao.DataAccessResourceFailureException:在等待与WritableServerSelector匹配的服务器的30000毫秒后超时。集群状态的客户端视图是{type = UNKNOWN,servers = [{address = localhost:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:Exception opening socket},由{java.net引起。 ConnectException:连接被拒绝:连接}}];嵌套异常是com.mongodb.MongoTimeoutException:在等待与WritableServerSelector匹配的服务器时30000 ms后超时。集群状态的客户端视图是{type = UNKNOWN,servers = [{address = localhost:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:Exception opening socket},由{java.net引起。 ConnectException:连接被拒绝:连接}}]

1 个答案:

答案 0 :(得分:1)

您的单元测试正在尝试加载完整的Spring Context。因此,它尝试加载有效的MongoTemplate以连接到MongoDB实例。

在大多数情况下,你不应该使用@SpringBootTests(用于集成测试),而是可以进行正常的JUnit测试:

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