从 Spring XML 配置文件中的不同子项目加载 sql 脚本

Loading sql scripts from a different subproject in Spring XML Config file

我在这个 Spring 项目中有几个子项目作为微服务工作。 在每个子项目中,有重复的 SQL 个我试图集中的测试脚本。

当前文件结构如下所示。

|rootproject
|--- microservice1
|     └─src
|       └─test
|         └─resources
|            ├─spring-config.xml
|            └─sql
|               └─h2
|                  ├─somescript.sql
|                  └─somescript2.sql
|--- microservice2
|--- microservice3

所有这些微服务基本上共享与微服务 1 相同的文件结构。

是否可以创建另一个子项目来包含 sql 脚本而不是重复 sql 测试脚本?像这样。

|rootproject
|--- testdata
|     └─src
|       └─test
|         └─resources
|            ├─spring-config.xml
|            └─sql
|               └─one
|               |  └─h2
|               |     └─bunchOfScripts.sql
|               └─two
|                  └─h2
|                     └─bunchOfScripts.sql
|--- microservice1
|--- microservice2
|--- microservice3

我目前在每个 subproject/microservice 的 spring-config.xml 文件中有一个 bean,它初始化一个 bean 以读取下面显示的 h2 数据。

<bean id="someID" class="package.to.load.data" init-method="load">
   <constructor-arg value="classpath:/sql/h2" />
</bean>

如何指定类路径以调用不同子项目中的 sql 脚本?在这种情况下,调用位于文件夹 testdata 中的测试脚本。

假设使用 Maven,你只需要让你的 testdata 子项目成为你其他子项目的依赖项。这会将 testdata 子项目放置在其他项目的类路径中,并且您现有的通过类路径对条目的引用:URI 应该可以工作。 (您可能必须将您的 testdata 子项目标记为 Java 项目,即使其中没​​有任何 java 代码,以便它做正确的事情?)。

有几个问题:您必须将资源文件放在 src/main,而不是 src/test,因为 Maven 不会导出 src/test 到其他项目 -但是您可以随后将对 testdata 的依赖添加为测试依赖,因此它只会在测试期间 see/use 它。您可能需要修改文件夹设置,或将脚本移动到 src/test/resources(因为这是 Maven Java 项目希望找到它们的地方)。