Spring Boot «Не удалось разрешить заполнитель»

Я работаю над приложением Spring Boot Tomcat, используя Maven. Когда я запускаю его в своей среде 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.

У меня есть это свойство sysm.client.api.path, определенное в моем application.properties, но на всякий случай я также добавил его в командную строку как параметр -D -Dsysm.client.api.path=my-path.

Сама инъекция значения происходит в каком-то коде зависимостей, иначе я бы просто жестко закодировал это значение.

Одно примечание: IntelliJ не запускает его как -jar; скорее, он объявляет все библиотеки в обширном аргументе командной строки -classpath, а затем использует мой класс @SpringBootApplication в качестве исполняемого класса, что совершенно не соответствует духу Spring Boot!

Мне интересно, почему этот модуль, кажется, получает свои свойства до загрузки application.properties, и есть ли способ переупорядочить это, чтобы он работал

ОБНОВЛЕНИЕ: я дважды проверил банку, и свойства приложения находятся в разделе BOOT-INF/classes/application.properties. Но по какой-то причине приложение не видит этого в банке. Когда я копирую их в каталог запуска, все работает нормально. Не знаете, почему они не берутся из банки, как ожидалось?

<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>

похоже, что в /src/main/resources отсутствуют определенные ваши свойства appplication.properties, у которых есть свойство sysm.client.api.path.

Jonathan JOhx 01.02.2019 19:26

Я так не думаю. Свойства есть, и я также добавил отсутствующее свойство в командную строку просто для сохранности (и я также скопировал все application.properties в файловую систему вместе с лаунчером). Application.properties есть, просто кажется, что он разрешает этот bean-компонент до загрузки application.properties

Victor Grazi 01.02.2019 19:30

Вы используете spring-boot-maven-plugin для создания фатжара? Можете ли вы проверить свою банку, включены ли в нее application.properties?

helospark 01.02.2019 19:34

Итак, вы можете добавить свой pom.xml или build.gradle?

Jonathan JOhx 01.02.2019 19:46

Да, это определенно в банке: -bash-4.1$ jar -tf lib/myjar.jar|grep application.properties BOOT-INF/classes/application.properties

Victor Grazi 01.02.2019 19:59

Я только что заметил, что когда я копирую application.properties в корень приложения, он работает правильно. По какой-то причине он не видит этот файл в банке

Victor Grazi 01.02.2019 20:12

Вы пробовали mvn clean package spring-boot:repackage?

Rafiek 01.02.2019 20:38

Я делаю mvn clean deploy на сервере сборки. Я добавил помпу выше

Victor Grazi 01.02.2019 20:40
0
8
3 264
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел ответ. У нас есть специальный деплойер, который развертывает все jar-файлы для общего Java-приложения. Конечно, это не обязательно для приложения SpringBoot, поскольку все jar-файлы являются внутренними (за исключением основного jar-файла и -bootstrapper.jar), но я ожидаю, что это не повредит выполнению приложения.

Однако, когда я удалил все лишние банки, приложение внезапно начало распознавать встроенные свойства application.properties.

У меня возникает соблазн закрыть этот вопрос, но, возможно, он может быть актуален для людей, у которых такая же ситуация? Кроме того, я хотел бы понять, почему происходит такое поведение? (Это происходит только с некоторыми приложениями. Другие прекрасно работают с лишними баночками)

в некоторых из этих банок предположительно было sysm.client.api.path = "value"?

Lance 03.02.2019 02:54

Да, наверное, так и есть, большое спасибо. Пожалуйста, дайте ответ, и я отмечу его правильным

Victor Grazi 04.02.2019 01:50

Другие вопросы по теме