Java 为什么可以';t@Value是否在此依赖项模块中解析?
我有一个SpringBoot项目,项目结构如下所示Java 为什么可以';t@Value是否在此依赖项模块中解析?,java,spring,maven,spring-boot,Java,Spring,Maven,Spring Boot,我有一个SpringBoot项目,项目结构如下所示 example(artifactId = example) +- demo(artifactId = demo) | +- src | | +-main | | +-java | | +-com | | +-example | | +-DemoService | | +-resources |
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”的依赖项。“示例”模块是demo和demo2的父模块。
问题是,当我在演示的application.properties中设置属性(site.password=password)时,我无法像这样在演示模块中解决它
@Service
public class DemoService {
@Value("${site.password}")
private String password;
}
--spring.config.location=classpath:/mydefault.properties
但如果我在demo2中将其设置为application.properties,则可以在demo2模块中的DemoService中解决该问题
提前谢谢
澄清:
Demo2是主类。jar中打包的应用程序属性优先,更多详细信息可以在那里找到 但您也可以像这样设置要使用的属性文件
@Service
public class DemoService {
@Value("${site.password}")
private String password;
}
--spring.config.location=classpath:/mydefault.properties
两个JAR上都有相同的类路径资源(
classpath:application.properties
),只有一个可见。通常,配置不应该打包在jar中。它应该在包中使用main
方法指定(在您的情况下为demo2
)
您还可以为@Value
注释指定一些默认值,例如:@Value(${site.password:mypassword}”)
如果您仍然希望在jar中包含属性,请尝试将其放在一个唯一的目录中,如:
src/main/resources/com/example/demo.properties
,并通过spring.config.location
将其包含在demo2
中,谢谢。Demo2和Demo有自己的属性文件。我想做的是让他们加载自己的属性。命令“-spring.config.location=classpath:/mydefault.properties”会让它们加载相同的文件吗?您可以给属性文件这样的命令--spring.config.location=classpath:/default.properties,classpath:/override.propertiesThanks-bekce。我同意不应该将配置打包在jar中。在我的项目中,我有一个模块(“demo”)处理mysql和redis的内容,其他模块(“demo2”、“demo3”…)只是从中获取数据。我在“demo”中设置属性,因为我不想将mysql/redis属性复制到所有其他模块。有没有更好的方法来组织这个项目?例如,将项目分成几个小项目。每个模块都是一个项目。“demo2”和其他人从“demo2”获取数据“通过RPC。@Max您似乎对模块管理感到困惑。对于您的情况,有两个常规选项。1.每个模块都独立运行,并通过REST API、RPC或MQ提供服务。有许多main
方法,每个模块都有自己的配置。这也称为微服务体系结构。2.有一个main
>模块,它调用依赖模块的方法(这不是RPC)。应该有一个配置。您的案例适合第二个配置。通常N个运行实例意味着N个配置,所以将所有配置放在一个模块中。如果demo3
将调用demo
的方法,只需@Autowire
相关bean即可。