Прежде чем ответить, когда вы говорите: Spring will always look for recources under recources folder directly, in this case its unable to load the file as its in the custom folder and its not under classpath.
, это не правильно.
Spring может выглядеть где угодно в вашей системе. Вот как вы можете загрузить различные файлы свойств при загрузке Spring и Spring:
@PropertySource("classpath:config/common.properties")
=> Будет искать в пути к классам файл, расположенный в папке config, в root из ваш classpath. @PropertySource("file:/config/common.properties")
=> Будет искать файл common.properties в root вашей файловой системы, здесь в /config/common.properties.
Сейчас возникает вопрос «что такое путь к классам», похоже, что оно заслуживает более подробного объяснения.
Путь к классам предназначен для JVM, какова файловая система для вашей ОС. Когда вы выполняете некоторый код java (например, файл .jar), JVM сохраняет все указанные вами файлы. Вы можете указать файлы при выполнении java -classpath /a/shared/folder,/a/dependency/app.jar,myApp.jar MainClass
. (Смотрите это для некоторых других способов: https://javarevisited.blogspot.com/2012/10/5-ways-to-add-multiple-jar-to-classpath-java.html). Довольно часто, что происходит с разработчиками (до того, как мы используем Spring), было следующее:
- Мы разрабатываем наше приложение и используем maven для управления зависимостями
- Мы выполняем наше приложение с помощью IDE все работает так же хорошо, жизнь прекрасна
- Мы готовы go жить (в производстве). Мы генерируем знаменитый
myApp.jar
и пытаемся запустить приложение java -jar myApp.jar
и ... ничего не работает. У вас есть проблемы с java (я полагаю, вы настроили основной класс в Манифесте ...), и вы получаете что-то вроде Caused by: java.lang.ClassNotFoundException: my.dependency.OtherClass
... - Наконец, вы понимаете, что жизнь трудна, и вы не готов go жить прямо сейчас. Вам нужно иметь что-то, что вы можете легко выполнить.
Одним из возможных решений этой проблемы, чтобы избежать проблем с classpath, является помещение всего в JAR-файл (который вызывается при весенней загрузке FAT jar
), и вы используйте java -jar myApp.jar
, и он работает нормально.
По умолчанию, когда вы генерируете проект maven, автоматически включаются некоторые папки, такие как:
src/main/java
=> your java файлы и пакеты src/main/resources
=> ваши файлы конфигурации (например, .properties) src/test/java
=> Ваши java тестовые файлы src/test/resources
=> ресурсы, удобные для ваших тестов
Когда вы генерируете свой jar-файл (более или менее каждая конфигурация, которую вы добавили в свой проект maven, но, допустим, все в порядке), то, что происходит, если компилятор принимает папки и файлы в src/main/java
и src/main/resources
и поместите их в root вашей банки. (Не стесняйтесь заглянуть в свои файлы jar. Это всего лишь Zip, вы можете открыть его, просмотреть его и убедиться сами).
Сказав это, когда вы говорите How do we explicitly set the custom folder as additional classpath folder?
и вы говорите о пользовательской папке, расположенной в src/main/resources
, затем при создании Jar пользовательская папка будет находиться в jar, а следовательно, в вашем пути к классам.
Если у вас по-прежнему возникают проблемы, выполните следующие действия. поможет вам:
- Разархивируйте ваши файлы jar и проверьте, что внутри. Если вы не видите в ней никакой папки
config/
, возможно, ваше Jar-поколение неверно - Попробуйте использовать
@PropertySource(...)
для загрузки файла свойств, в вашем classpath и в вашей файловой системе, чтобы увидеть, как он работает и что вы достигнете - Обратите внимание на следующее:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
- Не стесняйтесь переносить все больше и больше вашего старого кода в Spring-boot, будет намного проще для вас.