gpt4 book ai didi

java - Spring 类路径资源被覆盖

转载 作者:行者123 更新时间:2023-12-01 06:01:48 25 4
gpt4 key购买 nike

我有一个使用以下代码的类:

@Value(value = "classpath:mail_template.html")
private Resource template;

根据this教程这将允许我使用 template.getInputStream() 从我的 jar 文件内的文件中获取数据。这工作正常,直到另一个 mail_template.html已添加到另一个模块中。

我的应用程序有 main_application who 的 POM 具有其他模块作为依赖项。结构如下:

main_application
|
- modulue_1 (another module)
|
- src/main/java
- src/main/resources
|
- mail_template.html
- modulue_2 (my module)
|
- src/main/java
- src/main/resources
|
- mail_template.html

所以现在我的类使用 module_1 的 mail_template.html而不是我模块中的那个。据我了解,这是正确的行为,因为 module_1 首先加载,并且 @Value被注入(inject)第一个 mail_template.html它找到了,但在我的情况下这是不正确的,因为它覆盖了 module_2(以及后续模块)中与 module_1 中具有相同名称的资源。

是否可以指定使用当前类(或模块)来查找 src/main/resources 中的资源@Value 目录中注解?或者我必须对每个模块中的每个资源进行唯一命名以避免此问题?

我尝试了许多不同的“classpath:”路线,包括:

@Value(value = "classpath:module_2/mail_template.html")
....
@Value(value = "classpath*:mail_template.html")
...
@Value(value = "classpath*:module_2/mail_template.html")

但是所有这些都会导致FileNotFoundException .

编辑

各模块组成如下:

Maven POM Project
Maven Java Application
src/main/java
base.package.with.module.name.as.suffix.package
src/main/resources
resource_files_if_needed

如上所述,每个模块都在 Maven Java 应用程序下声明为依赖项 main_application每个 Maven Java 应用程序都使用一个“基础包”,并以模块名称作为后缀。

例如:

// main_application:
package my.main.application
// module_1:
package my.main.application.module1
// module_2:
package my.main.application.module2

使用此属性,Spring 可以使用 @Component 加载类。使用 <context:component-scan base-package="my.main.application" /> 进行注释在配置文件中。

最佳答案

类路径中只能有一个 mail_template.html。对于具有相同包和类名的类也是如此。

我建议我们在资源目录中使用不同的目录名称。

关于java - Spring 类路径资源被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56468642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com