我有一个Spring Boot项目,项目结构如下所示
example(artifactId = example)
+- demo(artifactId = demo)
| +- src
| | +-main
| | +-java
| | +-com
| | +-example
| | +-DemoService
| | +-resources
| | +-application.properties
| +- pom.xml
+- demo2(artifactId = demo2)
| +- src
| | +-main
| | +-java
| | +-resources
| | +-application.properties
| +- pom.xml
+-pom.xml
在这个项目中,“demo2”是“demo”的依赖。 “example”模块是demo和demo2的父级。
问题是当我在demo的application.properties中设置属性(site.password = password)时,我无法像这样在演示模块中解析它
@Service
public class DemoService {
@Value("${site.password}")
private String password;
}
但是如果我将它设置为demo2中的application.properties,它可以在演示模块的DemoService中解决。
提前致谢!
澄清: Demo2是主要的课程。
答案 0 :(得分:0)
打包在jar中的应用程序属性优先,可以在https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
找到更多详细信息但您也可以像这样设置要使用的属性文件
--spring.config.location=classpath:/mydefault.properties
答案 1 :(得分:0)
两个jar上都有相同的类路径资源(classpath:application.properties
),只有一个可见。通常,配置不应该打包在jar中。它应该在包中使用main
方法(在您的情况下为demo2
)中指定。
您还可以为@Value
注释指定一些默认值,例如:@Value("${site.password:mypassword}")
Details
如果您仍希望在jar中包含属性,请尝试将其放在一个唯一的目录中,例如:src/main/resources/com/example/demo.properties
,并通过demo2
将其包含在spring.config.location
中。