Возможно ли иметь несколько файлов application.properties? ( РЕДАКТИРОВАТЬ: обратите внимание, что этот вопрос эволюционировал с тем, который был на названии.)
Я попытался иметь 2 файла.
- Первый находится в корневой папке в приложении Jar.
- Второй находится в каталоге, указанном в пути к классам.
2 файла называются "application.properties".
Возможно ли "объединить" содержимое обоих файлов? (и второе значение свойства переопределяет первый) Или, если у меня есть один файл, то другой файл игнорируется?
ОБНОВЛЕНИЕ 1: можно объединить содержимое. Вчера казалось, что первый был проигнорирован, но кажется, что это потому, что тогда что-то было сломано. Теперь он работает хорошо.
ОБНОВЛЕНИЕ 2: он снова! Опять применяется только один из двух файлов. Это странно... Это началось после того, как я создал файл приложения jar с помощью Spring Tool Suite. И кажется, что версия Jar всегда игнорирует вторую (в classpath), в то время как поведение расширенной версии, которая работает на STS, меняется. Откуда я могу начать расследование?
ОБНОВЛЕНИЕ 3:
Поведение версии Jar было фактически правильным. Это спецификация java.exe. Когда указан параметр -jar, java.exe игнорирует параметр -classpath и переменную среды CLASSPATH, а путь к классу будет содержать только файл jar. Таким образом, игнорируется второй файл application.properties в пути к классам.
Теперь, как я могу загрузить второй файл application.properties в пути к классам?
ОБНОВЛЕНИЕ 4:
Мне удалось загрузить файл application.properties по внешнему пути при использовании опции -jar.
Ключ был 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 не удалось использовать утилиту загрузки свойств. BTW, In Spring Загрузочный файл Boot Maven (http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/maven-plugin/repackage-mojo.html), нет упоминания о том, что задаются триггеры ZIP, которые используется PropertiesLauncher. (Возможно, в другом документе?)
После того, как файл jar был создан, я мог видеть, что свойство PropertiesLauncher используется, проверяя свойство Main-Class в META-INF/MENIFEST.MF в банке.
Теперь я могу запустить банку следующим образом (в 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.
Теперь загружается файл application.properties в папке C:\My\External\Dir\config.
В качестве бонуса любой файл (например, статический html файл) в этом каталоге также может быть доступен банке, поскольку он находится в пути загрузчика.
Что касается не-jar (расширенной) версии, упомянутой в UPDATE 2, возможно, была проблема с порядком пути к классам.
(Кстати, я изменил заголовок вопроса, чтобы быть более конкретным для этой проблемы.)