【发布时间】:2020-02-23 01:16:22
【问题描述】:
我有一个使用 PostgreSQL 插件在 Heroku 上运行的 Spring Boot 应用程序。在启动时,spring boot 会自动在 PostgreSQL 中创建一些虚拟数据,例如 users 及其联系信息。表和insert语句存储在Schema.sql(pastebin)和Data.sql(pastebin)中
第一次启动时一切正常,但在我重新启动后,spring boot 应用程序再次创建相同的行,这会导致出现重复行、重复关系等错误。
如何在重启时禁用数据娱乐?
Heroku Config Vars 设置为:
每个 SQL 插入语句都有 ON CONFLICT DO NOTHING,每个创建表语句都有 IF NOT EXISTS
【问题讨论】:
-
“在启动时 spring boot 会自动创建一些虚拟数据”——你为什么在你的应用程序启动时这样做?
-
@Chris 因为我希望在启动时存在一些数据。当应用程序在使用时,它基本上可以让人们看到一切看起来如何。
-
对,但为什么应用程序启动?将其作为部署的一部分,或者更好的是,通过运行脚本明确地播种它不是更有意义吗?这听起来像是一次性任务,而不是每天都应该发生的事情(Heroku dynos 经常重启)。或者,根据数据,它可能属于数据库迁移。
-
@Chris 我希望应用程序启动时数据始终相同。这样,当参与者在那里添加他们自己的东西时,它会在 Dyno 重新启动时的某个时间点被删除。重点是显示“起始”数据,并且每次重新启动后起始数据都应该始终存在。即使用户决定搞砸它。
标签: postgresql spring-boot heroku