Java 如何使Play framework应用程序在执行控制器CRUD API方法之前运行SQL脚本?

Java 如何使Play framework应用程序在执行控制器CRUD API方法之前运行SQL脚本?,java,h2,slick,play-framework-2.7,Java,H2,Slick,Play Framework 2.7,我正在创建一个新的play框架应用程序,并使用slick连接到h2数据库。但当我运行应用程序并访问数据时,它会说找不到表。我希望它应该运行conf/evolutions/default文件夹中的1.sql文件 基本上是玩。进化不起作用 下面是我的application.conf文件 slick.dbs.default.driver = "slick.jdbc.MySQLProfile$" slick.dbs.default.db.driver = "com.mysql.cj.jdbc.Drive

我正在创建一个新的play框架应用程序,并使用slick连接到h2数据库。但当我运行应用程序并访问数据时,它会说找不到表。我希望它应该运行conf/evolutions/default文件夹中的1.sql文件

基本上是玩。进化不起作用

下面是我的application.conf文件

slick.dbs.default.driver = "slick.jdbc.MySQLProfile$"
slick.dbs.default.db.driver = "com.mysql.cj.jdbc.Driver"
slick.dbs.default.db.url = "jdbc:mysql://localhost:3306/playscalaslickexample"
slick.dbs.default.db.user = ""
slick.dbs.default.db.password = ""

# Evolutions
# ~~~~~
# You can disable evolutions if needed
play.evolutions.enabled=true
play.evolutions.autoApply=true

# You can disable evolutions for a specific datasource if necessary
play.evolutions.db.default.enabled = true
我在evolutions.default文件夹中有1.sql文件


我还尝试更改文件夹路径,如evolutions.playscalaslickexample。我仍然没有看到任何变化。

将evolutions和jdbc添加到依赖项列表中。此外,1.sql脚本应该位于应用程序的conf/evolutions/{database name}或conf/evolutions/default目录中。进化是自动激活的。如果您的数据库架构不是最新的,则需要启动应用程序并在浏览器上尝试localhost:9000。此时将出现一个错误页面,您可以通过运行相应的SQL脚本来同步数据库架构

您也可以参考文档

请按照以下步骤操作,这可能会对您有所帮助

  • 将1.sql保留在evolutions->default中
  • 在application.conf中添加以下行

    play.evolutions.enabled=false

  • 如果您使用的是test.conf行下面的mysql副本,请在conf中创建test.conf

    slick.dbs.default.driver=“slick.driver.MySQLDriver$” slick.dbs.default.db.url=“jdbc:h2:mem:test;MODE=MySQL;DATABASE\u TO\u UPPER=false;db\u CLOSE\u DELAY=-1” slick.dbs.default.db.user=“” slick.dbs.default.db.password=“”

  • 在build.sbt中添加以下行

    Test+=“-Dconfig.file=conf/Test.conf”中的javaOptions

    libraryDependencies++=Seq(进化)


  • 我试过你的建议。但我看不到任何变化。请让我知道我遗漏了什么?我把数据库从h2改成了mysql。这有关系吗?我更新了我的答案并添加了几个步骤,您可以按照这些步骤操作