в чем разница между classpath и classpath* в Spring boot?

#java #spring #classpath #banner

#java #spring #classpath #баннер

Вопрос:

когда я использую файл конфигурации баннера Spring boot, я нахожу, что:

это работает:

spring.banner.location=classpath:banner.txt

не работает:

spring.banner.location=classpath*:banner.txt

Итак, в чем разница между classpath: и classpath*: ?

Ответ №1:

Из документации Spring

Подстановочный путь к классу зависит от метода getResources() базового classloader. Поскольку большинство серверов приложений в настоящее время предоставляют свою собственную реализацию classloader, поведение может отличаться, особенно при работе с файлами jar. Простой тест, чтобы проверить, работает ли classpath *, заключается в использовании classloader для загрузки файла из jar в classpath: getClass().getClassLoader().getResources(«»). Попробуйте этот тест с файлами, которые имеют одинаковое имя, но размещены в двух разных местах. В случае, если возвращается несоответствующий результат, проверьте документацию сервера приложений на наличие настроек, которые могут повлиять на поведение classloader.

Итак, classPath предназначен для загрузки ресурсов из текущего загрузчика классов (просто для понимания не будет считывать ресурсы в jar или другой зависимости проекта)

classpath * будет использовать jar или другие ресурсы загрузчика классов.

Ответ №2:

Впервые с момента весенней загрузки отображается баннер в исходном коде.Вы можете найти код в SpringApplication.class метод printBanner используется для отображения баннера.Как сказал малликарджун, classPath предназначен для загрузки ресурсов из текущего загрузчика классов (просто для понимания не будет считывать ресурсы из jar или другой зависимости проекта), classpath * будет использовать jar или другие ресурсы загрузчика классов. Если вы используете classpath*:banner.txt найдет в jar.