我有一个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 {
...
}