我正在使用Maven处理Spring Boot Tomcat应用程序。当我在IDE(IntelliJ IDEA)中运行它时,它可以正常工作。但是,当我正常运行时
java -jar myjar.jar
我有例外
Caused by: java.lang.IllegalArgumentException:
Could not resolve placeholder 'sysm.client.api.path' in value "${sysm.client.api.path}"
我也尝试过使用JarLoader和PropertiesLauncher,但运气不好。
我的确在我的application.properties中定义了属性sysm.client.api.path,但是为了很好地实现,我也将它作为-D参数添加到命令行-Dsysm.client.api.path = my-路径。
值注入本身是在某些依赖项代码中进行的,否则我将仅对该值进行硬编码。
一个注意事项:IntelliJ没有将其作为-jar运行;而是在一个巨大的-classpath命令行参数中声明所有库,然后将我的@SpringBootApplication类用作可执行类,完全不符合Spring Boot的精神!
我想知道为什么该模块似乎在加载application.properties之前就已经获得其属性,以及是否有任何方法可以对其进行重新排序以使其起作用
更新:我仔细检查了jar并在BOOT-INF / classes / application.properties下找到了应用程序属性。但是由于某种原因,应用程序在jar中看不到它。当我将它们复制到启动目录时,它可以正常工作。不确定为什么没有按预期从罐子中捡起这些东西吗?
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>commy-group</groupId>
<artifactId>my-app</artifactId>
<version>2.0.1-SNAPSHOT</version>
<name>${project.artifactId}</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<distribution.root>discovery-service-${project.version}</distribution.root>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<ansible.group>npc</ansible.group>
<ansible.name>${project.artifactId}</ansible.name>
<ansible.deploy>2018-1</ansible.deploy>
</properties>
<scm>
<url>..</url>
<connection>..</connection>
<developerConnection>..</developerConnection>
</scm>
<distributionManagement>
...
</distributionManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.5.RELEASE</version>
</dependency>
<!-- ********************* SPRING ********************* -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>false</doUpdate>
<shortRevisionLength>8</shortRevisionLength>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:0)
找到了答案。我们有一个自定义部署程序,可以为通用Java应用程序部署所有jar。当然,对于SpringBoot应用程序来说这不是必需的,因为所有的jar都是内部的(除了主jar和-bootstrapper.jar之外),但我希望它不会损害应用程序的执行。
但是,当我删除所有多余的jar时,应用程序突然开始识别嵌入式application.properties。
我很想结束这个问题,但也许与情况相同的人有关?另外,我想了解为什么会发生这种现象? (这仅在某些应用程序中发生。其他应用程序在多余的jar上可以正常工作)