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

Posted

技术标签:

【中文标题】从 Spring XML Config 文件中的不同子项目加载 sql 脚本【英文标题】:Loading sql scripts from a different subproject in Spring XML Config file 【发布时间】:2018-08-06 16:15:43 【问题描述】:

我在这个 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

我目前在每个子项目/微服务的 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 中的测试脚本。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我在这个项目中使用 Gradle。是的,我已经在微服务的 build.gradle 文件中导入了 testdata 作为依赖项。我将尝试将测试文件移动到 src/main/resources,但我仍然对调用 src/main/resources 中的 sql 脚本的特定类路径感到困惑。这有意义吗? 您的classpath:/sql/one/h2 作为您需要加载的每个资源的前缀将起作用,只要您通过 Spring 将它们作为资源加载。否则,您可以只使用常规类加载器并使用前缀 /sql/one/h2 加载它们,因为它们是您的依赖项之一,因此它们将位于您的类路径中...... 是的,我能够通过将依赖项添加为类路径并使用类路径*:/sql/one/h2 来解决它。谢谢!

以上是关于从 Spring XML Config 文件中的不同子项目加载 sql 脚本的主要内容,如果未能解决你的问题,请参考以下文章

曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析上)

如何从 Spring Boot 应用程序属性加载 Spring config xml $ 值

Spring 中的 404 错误(java config / no web.xml)

spring roo 中的 webmvc-config.xml 在哪里

springCloud学习-分布式配置中心(Spring Cloud Config)

如何从 Spring Boot Config Server 提供的其他属性文件中的 application.properties 获取密钥?