Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';t@Value是否在此依赖项模块中解析?_Java_Spring_Maven_Spring Boot - Fatal编程技术网

Java 为什么可以';t@Value是否在此依赖项模块中解析?

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 |

我有一个SpringBoot项目,项目结构如下所示

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即可。