在 Vaadin 项目(Java Servlet 网络应用程序)中将 Flyway 迁移放在哪里?
Where to put Flyway migrations in a Vaadin project (Java Servlet web app)?
他们 Flyway migration files in a Vaadin 7 project created with the multi-module Maven archetype 放在哪里?
我将通过 Flyway 中的 Java API(不是命令行)激活迁移。
Vaadin 的解决方案是否适用于任何 Java Servlet based web app project running in a web container such as Tomcat or Jetty?
更新
自 2018-06 年起,名为 vaadin-archetype-application-multimodule
的 Vaadin 8 archetype 不再为 Web Pages
、META-INF
和 WEB-INF
提供现有文件夹,如图所示下面的 Previously 部分。 WEB-INF
和 classes
文件夹是在构建时动态创建的。
查看您的 foobar-ui
模块的文件夹。找到 src
> main
> resources
文件夹层次结构。按照 Flyway 约定添加嵌套文件夹 db
& migration
。
如果我们分解生成的 WAR 文件,我们会看到在构建过程中创建了一个 WEB-INF
文件夹,其中有一个嵌套的 classes
文件夹,我们可以在其中找到我们的 db
> migration
包含我们第一个添加的 SQL 脚本文件的文件夹。
之前
Vaadin Ltd. 提供的多模块 Maven 原型的早期版本使用了与上述不同的安排。
嵌套在 WEB-INF
中的默认文件夹
默认情况下,Flyway 会找到您的 .sql 迁移文件,如果位于这个确切的文件夹路径中:
/WEB-INF/classes/db/migration/
在您的项目中,在 -ui
模块中,找到 WEB-INF
文件夹。 Java Servlet 规范将此特殊文件夹定义为存储 class 文件、.jar 文件和其他资源的地方,这些文件应该可供您的 servlet 使用,但始终与外部隔离,永远不会作为 public Web 应用程序的一部分。
WEB-INF
文件夹将包含 classes
和 lib
文件夹。您可能还没有在 IDE 的项目视图中看到这两个文件夹。这两个特殊文件夹是在编译和构建过程中创建的。第一个包含 .class 用于您的 Web 应用程序的文件,而 lib
包含 .jar 文件。同样,所有这些都是由 Servlet 规范定义的。
技巧: 如果 IDE 未显示,请手动创建 classes
文件夹。在 compiling/build 过程中创建时,您放入其中的内容将自动与发往 classes
文件夹的其他内容合并。
默认情况下,Flyway 在 class 路径上查找完全命名为 /db/migration/
的层次结构。因此,在您添加到 WEB-INF
的 classes
文件夹中按这些名称创建文件夹。现在,当 Flyway 在运行时查找 classpath 时,Flyway 将查找 /WEB-INF/classes
并找到 /db/migration/
。
所以在你的 IDE:
- 在项目的
WEB-INF
中创建一个名为 classes
的文件夹。
- 创建一个名为
db
的嵌套文件夹。
- 创建一个名为
migration
的嵌套文件夹。
- 将您的 .sql 文件放在
migration
文件夹中。
运行 您的 Flyway 迁移。下面是使用 H2 Database 在我的 class 实现 [ServletContextListener][3]
的 contextInitialized
方法中调用的示例代码。
Flyway flyway = new Flyway ();
flyway.setDataSource ( "jdbc:h2:~/test" , "scott" , "tiger" );
flyway.migrate ();
警告
对这个答案持保留态度,因为我是 Flyway 的新手。但这对我有用 Flyway 4, Vaadin 7.6.4, Java 1.8 Update 77, NetBeans 8.1, Apache Tomcat 8.0.27, Mac OS X El Capitan.
他们 Flyway migration files in a Vaadin 7 project created with the multi-module Maven archetype 放在哪里?
我将通过 Flyway 中的 Java API(不是命令行)激活迁移。
Vaadin 的解决方案是否适用于任何 Java Servlet based web app project running in a web container such as Tomcat or Jetty?
更新
自 2018-06 年起,名为 vaadin-archetype-application-multimodule
的 Vaadin 8 archetype 不再为 Web Pages
、META-INF
和 WEB-INF
提供现有文件夹,如图所示下面的 Previously 部分。 WEB-INF
和 classes
文件夹是在构建时动态创建的。
查看您的 foobar-ui
模块的文件夹。找到 src
> main
> resources
文件夹层次结构。按照 Flyway 约定添加嵌套文件夹 db
& migration
。
如果我们分解生成的 WAR 文件,我们会看到在构建过程中创建了一个 WEB-INF
文件夹,其中有一个嵌套的 classes
文件夹,我们可以在其中找到我们的 db
> migration
包含我们第一个添加的 SQL 脚本文件的文件夹。
之前
Vaadin Ltd. 提供的多模块 Maven 原型的早期版本使用了与上述不同的安排。
嵌套在 WEB-INF
中的默认文件夹
默认情况下,Flyway 会找到您的 .sql 迁移文件,如果位于这个确切的文件夹路径中:
/WEB-INF/classes/db/migration/
在您的项目中,在 -ui
模块中,找到 WEB-INF
文件夹。 Java Servlet 规范将此特殊文件夹定义为存储 class 文件、.jar 文件和其他资源的地方,这些文件应该可供您的 servlet 使用,但始终与外部隔离,永远不会作为 public Web 应用程序的一部分。
WEB-INF
文件夹将包含 classes
和 lib
文件夹。您可能还没有在 IDE 的项目视图中看到这两个文件夹。这两个特殊文件夹是在编译和构建过程中创建的。第一个包含 .class 用于您的 Web 应用程序的文件,而 lib
包含 .jar 文件。同样,所有这些都是由 Servlet 规范定义的。
技巧: 如果 IDE 未显示,请手动创建 classes
文件夹。在 compiling/build 过程中创建时,您放入其中的内容将自动与发往 classes
文件夹的其他内容合并。
默认情况下,Flyway 在 class 路径上查找完全命名为 /db/migration/
的层次结构。因此,在您添加到 WEB-INF
的 classes
文件夹中按这些名称创建文件夹。现在,当 Flyway 在运行时查找 classpath 时,Flyway 将查找 /WEB-INF/classes
并找到 /db/migration/
。
所以在你的 IDE:
- 在项目的
WEB-INF
中创建一个名为classes
的文件夹。 - 创建一个名为
db
的嵌套文件夹。 - 创建一个名为
migration
的嵌套文件夹。 - 将您的 .sql 文件放在
migration
文件夹中。
运行 您的 Flyway 迁移。下面是使用 H2 Database 在我的 class 实现 [ServletContextListener][3]
的 contextInitialized
方法中调用的示例代码。
Flyway flyway = new Flyway ();
flyway.setDataSource ( "jdbc:h2:~/test" , "scott" , "tiger" );
flyway.migrate ();
警告
对这个答案持保留态度,因为我是 Flyway 的新手。但这对我有用 Flyway 4, Vaadin 7.6.4, Java 1.8 Update 77, NetBeans 8.1, Apache Tomcat 8.0.27, Mac OS X El Capitan.