我使用play 2.0.1开发小应用程序,并发现使用内部H2数据库进行客户预览非常有用。数据库中只有几行,一个或两个用户。在我的笔记本电脑中编译应用程序并在测试服务器上部署tar是非常舒服的。但看起来H2不时下降。我在application.log中找到了这个:
! @ 6anj14ljo - 内部服务器错误,请求[POST / admin] - >
play.core.ActionInvoker $$ anonfun $获得$ 1 $$ anon $ 1:执行 exception [[PersistenceException:Query抛出SQLException:table 找不到“经理”。
我知道使用H2进行生产并不是一个好主意。但我不想每次都配置mysql。 这种H2行为的原因是什么?
答案 0 :(得分:5)
使用h2-browser
检查数据库的状态,以及结构是否与例外情况相同:
play
h2-browser
- 它将在新的浏览器窗口中打开h2-browser
~run
h2-browser
转到窗口,并使用您在application.conf
db.default.url
中提供的相同路径进行连接
醇>
另一方面,我发现,对你来说,在开发和生产模式下使用不同的数据库可能很烦人。每个数据库引擎都有一些非常具体的内容,您需要解决两次问题,一次针对H2
- 稍后针对MySQL
。这没有任何意义,每次在开发模式下重新启动应用程序时,更糟糕的是,您需要再次使用示例数据填充它以进行调试。也许在重启之间你忘记添加一些记录等。
尽管可以通过在onStart()
方法中使用Global object插入相同的测试数据集来解决最后一个问题,但在重启之间将测试数据保存在MySQL中会更加舒适。
当然,如果您仍然想要/需要使用H2
,您也可以通过从网址中删除file mode
段,在mem
中使用它,然后它会保留在磁盘。
答案 1 :(得分:0)
您是否将数据库配置为不丢弃表以防万一没有连接?从documentation开始,它表示您必须在配置文件中将DB_CLOSE_DELAY=-1
附加到数据库网址,以防止此类行为。
我在运行"生产"时遇到了同样的错误。应用程序与docker容器中的内存数据库。经过一段时间,我正在运行它而不与它交互,表格将被删除。
附加DB_CLOSE_DELAY=-1
标志似乎已修复它