启动时,我检查一些数据,如果没有,则尝试保存一些默认值(暂时用于测试)。
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中的分析似乎显示成功的查询。
我的资源库和实体如下:
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()中结束,因为我发现如果没有这个,保存将永远不会发生。