Spring MongoRepository,在哪里捕获异常



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

如果我尝试用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:创建类路径资源[org/springframework/boot/autoconfig/data/mongo/MongoDataAutoConfiguration.class]中定义的名称为"mongoTemplate"的bean时出错:通过工厂方法实例化bean失败;嵌套异常为org.springframework.beans.BeanInstanceException:未能实例化[org.springfframework.data.mongodb.core.MongoTemplate]:工厂方法"MongoTemplate"引发异常;嵌套异常为org.springframework.dao.DataAccessResourceFailureException:在等待与WritableServerSelector匹配的服务器时,在30000毫秒后超时。集群状态的客户端视图为{type=UNKNOWN,servers=[{address=localhost:27017,type=UNNOWN,state=CONECTING,exception={com.mongodb.MongoSocketOpenException:打开套接字的异常},由{java.net.ConnectException:拒绝连接:连接}}引起];嵌套异常是com.mongodb.MongoTimeoutException:在等待与WritableServerSelector匹配的服务器时,在30000毫秒后超时。群集状态的客户端视图为{type=UNKNOWN,servers=[{address=localhost:27017,type=UNKNOWN,state=CONECTING,exception={com.mongodb.MongoSocketOpenException:打开套接字的异常},由{java.net.ConnectException:拒绝连接:连接}}引起]

您的单元测试正在尝试加载完整的Spring上下文。因此,它试图加载一个有效的MongoTemplate来连接到MongoDB实例。

在大多数情况下,您不应该使用@SpringBootTests(用于集成测试),而是可以进行一个普通的JUnit测试:

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

最新更新