mongodb - Sprint Boot Mongo Respositry 挂起第二个请求
问题描述
我在使用 SpringBoot MongoRepository 时遇到了一个奇怪的问题。
我已将问题本地化为在成功查询我的 Mongo 实例后返回对请求的响应。我有一个要查询的简单对象。一开始我可以查询并立即得到回复。之后它在成功查询 Mongo 后挂起。
这是问题发生时的日志范围
2021-04-13 21:20:03 DEBUG [http-nio-8080-exec-2] [MongoQueryCreator.java:160] Created query Query: { "trackingCode" : "PERS4J"}, Fields: {}, Sort: {}
2021-04-13 21:20:03 DEBUG [http-nio-8080-exec-2] [MongoTemplate.java:2551] find using query: { "trackingCode" : "PERS4J"} fields: Document{{}} for class: class com.gotem.domain.Link in collection: link
2021-04-13 21:20:03 DEBUG [http-nio-8080-exec-2] [SLF4JLogger.java:56] Sending command '{"find": "link", "filter": {"trackingCode": "PERS4J"}, "limit": 2, "$db": "gotem"}' with request id 9 to database gotem on connection [connectionId{localValue:2, serverValue:11}] to server localhost:27017
2021-04-13 21:20:03 DEBUG [http-nio-8080-exec-2] [SLF4JLogger.java:56] Execution of command with request id 9 completed successfully in 2.47 ms on connection [connectionId{localValue:2, serverValue:11}] to server localhost:27017
这是针对 Mongo 4.4.3 使用 Spring Boot 2.2.0.RELEASE。
我很难过:/
添加简化的设置和配置。
应用程序属性
spring.data.mongodb.uri=mongodb://localhost:27017/linkTrack
存储库
@Repository
public interface LinkRepository extends MongoRepository<Link, Long> {
Link findOneByTrackingCode(String trackingCode);
}
查询控制器
public class LinkController {
private static final Logger LOG = LoggerFactory.getLogger(LinkController.class);
@Autowired
private LinkRepository linkRepository;
@RequestMapping(value = "/retrieve/{trackingCode}", method = RequestMethod.GET)
public Link findOneByTrackingCode(@PathVariable String trackingCode) {
Link link = linkRepository.findOneByTrackingCode(trackingCode);
LOG.debug("Link: " + link);
return link;
}
}
目的
@Document
public class Link implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String id;
private String trackingCode;
public Link() {
this.trackingCode = "123456"; // THIS WAS THE ISSUE :(
}
private getTrackingCode(){
return this.trackingCode
};
}
解决方案
出色地。废话。我在链接对象中有一个构造函数,它将生成的 id 添加到 trackingCode 字段中,一旦删除它就可以按预期工作。
我仍然不知道为什么它在重新启动服务后对第一个请求起作用并且只是在之后才挂起。
推荐阅读
- android - 添加菜单栏时出错(缺少 com.android.support:appcompat-v7:30 的类)
- javascript - 使用 html 中的 url 从远程服务器播放视频
- python - Python 3如何将2个字符合二为一
- java - 进行拓扑排序时数组越界异常
- python - 样本协方差的特征值远离协方差的特征值
- pycharm - 从终端消息错误到文件的 Pycharm 链接
- html - Rails 和 Font Awesome 不起作用?图标不显示
- vue.js - 在 vue 中更新组件中的初始值
- python-3.x - EOFError:读取一行时出现EOF
- python - 使用 np.logical_and 后内核死机