为什么不能在此依赖模块中解析@Value?

时间:2017-01-20 03:29:06

标签: java spring maven spring-boot

我有一个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是主要的课程。

2 个答案:

答案 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中。