H2数据库在playframework2中失败

时间:2012-06-25 08:24:14

标签: playframework playframework-2.0 h2

我使用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行为的原因是什么?

2 个答案:

答案 0 :(得分:5)

使用h2-browser检查数据库的状态,以及结构是否与例外情况相同:

终端/命令行中的

  1. play
  2. h2-browser - 它将在新的浏览器窗口中打开h2-browser
  3. ~run
  4. 执行进化
  5. 使用h2-browser转到窗口,并使用您在application.conf
  6. 中的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标志似乎已修复它