我尝试有2个文件。
2个文件都命名为“ application.properties”。
是否可以“合并”两个文件的内容?(第二个属性的值会覆盖第一个属性的值)或者,如果我有一个文件,则另一个文件会被忽略?
更新1:可以“合并”内容。昨天似乎第一个被忽略了,但这似乎是因为那时有些问题。现在它运作良好。
更新2:又回来了!同样,仅应用两个文件之一。这很奇怪…它是在我使用Spring Tool Suite构建了app jar文件之后开始的。而且,Jar版本似乎总是忽略第二个版本(在类路径中),而在STS上运行的扩展版本的行为却有所不同。我可以从哪里开始调查?
更新3:
Jar版本的行为实际上是正确的。这是java.exe的规范。当指定-jar选项时,java.exe将同时忽略-classpath选项和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属性启动器无法使用。顺便说一句,在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文件。
另外,Jar也可以访问该目录中的任何文件(例如,静态html文件),因为它位于加载程序路径中。
至于UPDATE 2中提到的非jar(扩展)版本,可能存在类路径顺序问题。
如果你尚未更改Spring Boot的默认值(意味着你正在使用@EnableAutoConfiguration
或@SpringBootApplication
并且未更改任何属性源处理),则它将按以下顺序查找属性(最高优先级最低)。
/config
subdir of the current directory/config
package文档的此部分提到了上面的列表
这也就意味着,如果一个属性被发现例如application.properties
在src/resourcesIS
将被覆盖由具有相同名称的属性中发现application.properties
的/config
是“下一个”被包装jar目录。
Spring Boot使用的默认顺序允许非常简单的配置外部化,从而使应用程序易于在多个环境(开发,分段,生产,云等)中进行配置
要查看Spring Boot提供的用于属性读取的全部功能(提示:除了从read读取之外,还有更多可用的功能application.properties
),请查阅文档的此部分。
从上面的简短描述或完整的文档中可以看出,Spring Boot应用程序非常适合DevOps!
我试着有两个文件。 第一个在应用程序JAR的根文件夹上。 第二个在类路径中指定的目录上。 2个文件都名为“Application.Properties”。 事实上,Jar版本的行为是正确的。这是java.exe的规范。当指定-jar选项时,java.exe同时忽略-CLASSPATH选项和CLASSPATH环境变量,并且类路径将只包含jar文件。因此,类路径上的第二个application.pro
有一个选项可以忽略Spring Bootjar包application.properties文件,并从服务器上的目录中搜索application.properties的属性值。 在使用spring boot运行jar应用程序的服务器上,我需要应用程序在服务器上的另一个目录中查找application.properties文件的属性值,而不考虑jar中现有的boot-inf\classes\appl
如何使用android volley下载pdf文件或zip文件。使用字符串、JSON、图像或视频很容易。其他文件呢?
Java中的jlink功能允许您为应用程序创建单独的运行时环境。通常,此应用程序所需的所有模块都由jlink压缩成一个大的“模块”文件。 我很感兴趣的是,是否有办法去掉一些模块,使它们成为单独的jar文件,但让jlink能够找到它们并仍然运行应用程序。有没有办法做到这一点? 例如,如果您正在处理一个LGPL库,那么就是这种情况的一个用例。您可能希望将LGPL库从庞大的模块“blob”中删除,并将其
我已经创建了一个SpringBoot应用程序,并且我将Application.properties放置在jar文件的同一个文件夹中。这是文件的内容: 当我在jar文件夹外运行/bin/java-jar/opt/apl/org.web.exemplo-java-maven.1.0.0-90/org.web.exemplo-java-maven-1.0.0-90.jar时,它不读取applicatio