Определение свойств системы в плагине Spring Boot

Я хотел бы указать некоторые системные свойства в моем приложении (определенные во время компиляции).

Я использую плагин весенней загрузки maven для компиляции

В настоящее время в соответствии с этими вопросами: Укажите системное свойство для проекта Maven Я пробовал следующая настройка (однако это не работает, как для другого плагина)

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>application.boot.AppStarter</mainClass>
                <systemProperties>
                    <systemProperty>
                        <name>application.version</name>
                        <value>${application.version}</value>
                    </systemProperty>
                    <systemProperty>
                        <name>release.date</name>
                        <value>${timestamp}</value>
                    </systemProperty>
                </systemProperties> 
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

Как я могу указать свойства в этом плагине?


person mangusbrother    schedule 26.10.2014    source источник
comment
плагин spring-boot-maven просто создает исполняемый файл jar. Что вы пытаетесь сделать с системными свойствами? Вы хотите сказать, что вам нужно, чтобы некоторые свойства были доступны в файле свойств при выполнении сгенерированного jar? repackage не поддерживает какой-либо параметр systemProperties, как показано в docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/   -  person coderplus    schedule 26.10.2014
comment
Я хотел бы две вещи. 1) Свойство Hermes.version maven pom.xml и 2) Дата создания банки. Чтобы она была доступна из моего кода. Если они являются системными свойствами, я могу получить к ним доступ с помощью System.getProperty()   -  person mangusbrother    schedule 26.10.2014


Ответы (1)


Системные свойства Java, которые вы добавляете, доступны только процессу, в который они добавлены. Поэтому, даже если вам удастся добавить некоторые системные свойства во время сборки Maven, их больше не будет, когда сборка будет завершена.

Что произойдет, если вы передадите свою банку кому-то другому. Как вы ожидаете, что эти свойства будут доступны?

Решение

Обратитесь к этому post чтобы увидеть, как получить доступ к идентификатору артефакта и версии во время выполнения. Аналогичным образом вы можете добавить запись временной метки в src/main/resources/project.properties

buildTimestamp=${timestamp}

timestamp не является предопределенным свойством, таким как project.version или project.artifactId. Поэтому вам нужно будет установить извлечение метки времени из свойства Maven ${maven.build.timestamp} и установить его как значение для вашего свойства timestamp. Ответ на этот вопрос уже дан в этом вопросе.

person coderplus    schedule 26.10.2014
comment
Пока он пытается успешно прочитать свойства, я получаю: Не удалось разрешить заполнитель «property.name» в строковом значении «$ {property.name}» - person mangusbrother; 26.10.2014
comment
что-то похожее на это? stackoverflow.com/questions/20244696 / - person coderplus; 26.10.2014
comment
Мои свойства читаются, как будто я помещаю их как обычные значения, они успешно читаются. Если я использую ${}, однако это не будет - person mangusbrother; 26.10.2014
comment
проверьте, правильно ли работает фильтрация ресурсов, проверьте target/classes/project.properties после сборки Maven. - person coderplus; 26.10.2014
comment
файл свойств успешно адаптируется. У меня возникли проблемы с чтением свойств. я посмотрю на это немного больше и вернусь к вам - person mangusbrother; 27.10.2014
comment
хорошо, это работает после установки mvn. Единственная оставшаяся проблема заключается в том, что он не будет работать из исполняемого файла в eclipse, поскольку он пытается загрузить maven.build.timestamp. Есть ли способ установить это соответствующим образом? - person mangusbrother; 27.10.2014
comment
это свойство не будет установлено при сборке из eclipse (поскольку у вас действительно нет сборки. В случае, если что-то ломается, вы можете указать значение по умолчанию, которое может использовать eclipse: bugs.eclipse.org/bugs/show_bug.cgi?id=388874#c4 - person coderplus; 27.10.2014