【问题标题】:Sprint Boot Mongo Respositry Hangs on Second ReqeustSpring Boot Mongo 存储库在第二次请求时挂起
【发布时间】:2021-04-13 21:33:54
【问题描述】:

我在使用 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。

我被难住了:/

添加简化的设置和配置。

application.properties

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
    };
  
}

【问题讨论】:

  • 挂起到底是什么意思?是永久封杀吗?你是如何触发数据库查询的?能把所有相关的代码和配置sn-ps都加进去吗?
  • 我看到了上面的执行,然后它再也没有做任何其他事情。存储库查找之后的下一行是用于输出对象的调试行。启动后的第一个请求将在它停止后返回它。添加上面的配置详细信息。
  • 我看到存储库定义LinkRepository extends MongoRepository&lt;Link, Long&gt;,需要是LinkRepository extends MongoRepository&lt;Link, String&gt;。此外,请尝试在您的 find 方法中使用 @Query 注释来指定您将参数传递给查询。

标签: mongodb spring-boot


【解决方案1】:

嗯。废话。我在链接对象中有一个构造函数,它将生成的 id 添加到 trackingCode 字段中,一旦删除它就可以按预期工作。

我仍然不知道为什么它在重新启动服务后在第一个请求上起作用并且在之后才挂起。

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多