启动时,我检查一些数据,如果不存在,则尝试保存一些默认值(暂时用于测试)。
val subs = repo.findAll().toIterable()
if(subs.none()) {
repo.saveAll(defaults.map { Source(it.link.hashCode().toLong(), it::class.java.canonicalName, arrayOf(it.link)) }).blockLast()
}
第一次运行时,我们将到达 saveAll() 但永远不会解锁。数据保存在MongoDB中,我可以用Robo 3t确认。
随后运行实际存在的数据将导致第一个 findAll 永远不会解除阻塞。
MongoDB 中的分析似乎显示查询成功。
findAll() 查询简介 https://i.stack.imgur.com/ZrerX.png
我的存储库和实体如下:
interface SourceRepository : ReactiveCrudRepository<Source, Long> {
//
}
data class Source(
@Id val id: Long,
val type: String,
val params: Array<String>
)
这是在 Kotlin 中,针对 Spring Boot 2.0.0.M4。我的目标是在 docker 中运行的 MongoDB 实例。如果我删除这部分启动逻辑,我的另一个 ReactiveCrudRepository 就能够很好地读/写,永远不会阻塞。
工作存储库的 saveAll() 调用也在 blockLast() 中结束,因为我发现如果没有这个,保存实际上永远不会发生。