SQL(DDL)脚本的推荐位置是什么?

Maven标准目录结构中 SQL,DDL,…脚本的推荐位置是什么?

我敢打赌,几乎每个Web项目都使用一个DB和一些需要存储在某个地方的SQL脚本,那么可能是保存这些文件的“最佳”位置?

请指教。

我认为这没有最佳做法。 在我以前的项目中,我创build了一个单独的目录来存储这样的SQL脚本。

例如src/main/db

它不会被打包到最终的JAR中(这在大多数情况下是首选的方式),但是它足够方便,可以在程序集中打包。 您甚至可以将它们打包在主工件JAR中,通过添加相应的资源声明或使用maven build-helper插件。

但是,这一切都取决于你在这个脚本上的使用。 不过,我只会考虑将它们放在资源中,只有当它们真的是您的应用程序加载的资源时。

我认为这完全取决于何时以及如何处理这些脚本:

  1. 编译时间 :这些是你的编译器/工具链消耗和产生工件的东西。 Maven的指导非常清楚,因此这些文件将属于src/main/某处,如src/main/sqlsrc/main/db 。 虽然我不这样做,但我可以看到这些被编译中的任务用来修改你的数据库。 我可以看到在这里使用liquibase脚本,然后通过maven任务执行。
  2. 运行时 :这些由运行时环境使用,可以对其进行修改,或者由其使用来生成结果。 把它们放在src/main/resources似乎是合理的,这样你的运行时进程就可以使用它们,就像你认为合适的那样改变你的数据库 – 比如在部署时作为热修复处理的一部分,或者作为普通数据库的一部分版本控制努力。 再次,也许你用你的应用程序运输liquibase,然后就地改变数据库的方式…
  3. devise时间 :这似乎是最有可能的情况。 我应该在哪里存储我的DDL,以便在VCS中正确地跟踪它们,并保持我的符合Maven的结构? 对我来说,这是src/scripts/sqlsrc/scripts/db 。 这将它们作为maven的权限范围内的“源”文件,但在一个devise用于更特别的方式的地方。

src/main/resources是一个很好的地方,但是记住它被打包到你的最终jar中,所以这取决于你是否要在生产代码中显示这个。

如果不是的话,你可以通过添加maven-jar-pluginconfiguration摘要来过滤掉适当的pom.xml

 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <excludes>src/main/resources/privateSubdir/**</excludes> </configuration> </plugin> 

我会使用src/main/resources来达到这个目的。 也许在那里创build一个子文件夹。

这很大程度上取决于你的里程,但首先把你的应用程序和底层的数据库结构分开是个好主意。 因此,我build议你将所有数据库相关的东西移动到一个单独的Maven项目。 完成之后,数据库脚本在/ src / main / scripts中有一个很好的插槽。