Я создаю jar-приложение и использую maven-shade-plugin для его упаковки.
В нем есть несколько файлов свойств, и я использую PropertyPlaceholderConfigurer для чтения свойств:
<bean id="configurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/properties/core.properties</value>
</list>
</property>
</bean>
Поскольку я хочу обновить свойства гибкого файла, я делаю это для исключения свойств, когда пакет:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
<excludes>
<exclude>properties/core.properties</exclude>
</excludes>
</resource>
</resources>
После упаковки jar, я создаю каталог свойств, содержащий core.properties и помещаю его в тот же каталог, где находится файл jar.
Когда я запускаю файл jar:
java -jar test.jar
Может читать свойства в файлах core.properties.
Но если я создаю приложение springboot и выполняю те же шаги, но упаковываю его с помощью Spring-boot-maven-plugin
Затем запустите банку с той же командой:
java -jar test.jar
Произошла ошибка:
Caused by: java.io.FileNotFoundException: class path resource [application.properties] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)
at org.springframework.core.io.support.EncodedResource.getInputStream(EncodedResource.java:159)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:99)
at org.springframework.core.io.support.PropertiesLoaderUtils.fillProperties(PropertiesLoaderUtils.java:73)
at org.springframework.core.io.support.PropertiesLoaderUtils.loadProperties(PropertiesLoaderUtils.java:59)
at org.springframework.core.io.support.ResourcePropertySource.<init>(ResourcePropertySource.java:67)