是否可以有多个 application.properties 文件? ( 编辑:请注意,这个问题演变为标题上的问题。)
我试图有2个文件。
- 第一个位于应用程序 Jar 的根文件夹中。
- 第二个在类路径中指定的目录上。
2 个文件都被命名为“application.properties”。
是否可以“合并”两个文件的内容? (并且第二个的属性值覆盖第一个的)或者,如果我有一个文件,那么另一个文件被忽略?
更新 1 :可以“合并”内容。昨天好像第一个被忽略了,但似乎是因为当时有什么东西坏了。现在它运作良好。
更新2 :又回来了!同样,仅应用了两个文件中的一个。这很奇怪……它是在我使用 Spring Tool Suite 构建应用程序 jar 文件之后开始的。而且似乎 Jar 版本总是忽略第二个(在类路径中),而在 STS 上运行的扩展版本的行为各不相同。我可以从哪里开始调查?
更新 3 :
Jar 版本的行为实际上是正确的。这是java.exe的规范。当指定 -jar 选项时,java.exe 将忽略 -classpath 选项和 CLASSPATH 环境变量,并且类路径将仅包含 jar 文件。因此,类路径上的第二个 application.properties 文件将被忽略。
现在,如何让类路径上的第二个 application.properties 被加载?
更新 4 :
在使用 -jar 选项时,我设法在外部路径中加载了 application.properties 文件。
关键是PropertiesLauncher。
要使用 PropertiesLauncher,必须像这样更改 pom.xml 文件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <!-- added -->
<layout>ZIP</layout> <!-- to use PropertiesLaunchar -->
</configuration>
</plugin>
</plugins>
</build>
为此,我引用了以下 StackOverflow 问题: spring boot properties launcher cannot use .顺便说一句,在 Spring Boot Maven 插件文档( http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/repackage-mojo.html )中,没有提到指定 ZIP 触发器使用 PropertiesLauncher。 (也许在另一个文件中?)
构建 jar 文件后,我可以通过检查 jar 中 META-INF/MENIFEST.MF 中的 Main-Class 属性看到使用了 PropertiesLauncher。
现在,我可以按如下方式运行 jar(在 Windows 中):
java -Dloader.path=file:///C:/My/External/Dir,MyApp-0.0.1-SNAPSHOT.jar -jar MyApp-0.0.1-SNAPSHOT.jar
请注意,应用程序 jar 文件包含在 loader.path 中。
现在 C:\My\External\Dir\config 中的 application.properties 文件已加载。
作为奖励,该目录中的任何文件(例如,静态 html 文件)也可以被 jar 访问,因为它位于加载程序路径中。
至于 UPDATE 2 中提到的非 jar(扩展)版本,可能存在类路径顺序问题。
(顺便说一句,我更改了问题的标题以更具体地针对这个问题。)
原文由 zeodtr 发布,翻译遵循 CC BY-SA 4.0 许可协议
在使用 -jar 选项时,我设法在外部路径中加载了 application.properties 文件。
关键是PropertiesLauncher。
要使用 PropertiesLauncher,必须像这样更改 pom.xml 文件:
为此,我引用了以下 StackOverflow 问题: spring boot properties launcher cannot use .顺便说一句,在 Spring Boot Maven 插件文档( http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/repackage-mojo.html )中,没有提到指定 ZIP 触发器使用 PropertiesLauncher。 (也许在另一个文件中?)
构建 jar 文件后,我可以通过检查 jar 中 META-INF/MENIFEST.MF 中的 Main-Class 属性看到使用了 PropertiesLauncher。
现在,我可以按如下方式运行 jar(在 Windows 中):
请注意,应用程序 jar 文件包含在 loader.path 中。
现在 C:\My\External\Dir\config 中的 application.properties 文件已加载。
作为奖励,该目录中的任何文件(例如,静态 html 文件)也可以被 jar 访问,因为它位于加载程序路径中。
至于 UPDATE 2 中提到的非 jar(扩展)版本,可能存在类路径顺序问题。