#spring-boot
#spring-boot
Вопрос:
Я просто хочу знать, есть ли какая-либо разница между запуском приложения spring boot с :
mvn spring-boot:run
и
java -jar target/the-packaged-file.war (Or in IDE, right click and run java application)
Ответ №1:
Отличный вопрос.
Мы предполагаем, что нет никакой разницы между mvn spring-boot:run
и запуском вашего приложения из вашей IDE. Оба запускают основной класс, используя classpath проекта. Последнее настоятельно рекомендуется при работе над вашим приложением: если вы запустите свое приложение из своей IDE, вы получите все приятные функции, такие как debugging и devtools. Первый используется, когда вам нужен стандартный способ запуска приложения в командной строке. Плагин maven также может запускать ваше приложение до этапа тестирования интеграции (см. start
Цель плагина Maven / Gradle). Если вы используете сборку для фильтрации некоторых ресурсов, ваша среда разработки должна знать об этом, иначе некоторые данные могут не быть отфильтрованы при запуске приложения из среды разработки.
java -jar yourapp.jar
выполняется на конечном артефакте. Spring Boot заботится о создании пути к классу приложения. Отфильтрованные ресурсы хранятся в jar. Но, в конце концов, это предназначено для того, чтобы делать то же самое.
Теперь в вашем вопросе есть war
. Вы не можете ожидать, что обычный war
обратный вызов будет применяться к чему-то, что выполняется как основной класс. Сказав это, Spring Boot делает все возможное, чтобы предоставить вам все инструменты для обеспечения согласованности. war
, который запускается из контейнера запущенного сервлета, будет инициализирован не методом main, а инициализатором сервлета. Однако у вас есть способ поделиться кодом инициализации, чтобы он был согласованным. Цель запуска плагина добавит src/main/webapp
, чтобы эти файлы также обслуживались.
TL; DR если вы ищете согласованную историю во всех средах, не используйте war packaging.
Комментарии:
1. Я получил ошибку шаблона: Вызванную: org.thymeleaf.exceptions. Исключение TemplateInputException: шаблон для устранения ошибок «/ error», шаблон может не существовать или может быть недоступен ни для одного из настроенных преобразователей шаблонов, когда я запускаю приложение с
java -jar target/myApp.jar
и пытаюсь получить доступ к недопустимому URL, но когда я запускаю сmvn spring-boot:run
моим шаблоном error.html работает нормально. Кто-нибудь знает почему? Резервуары2. Пожалуйста, задайте свой собственный вопрос, комментарии не предназначены для этого.
3. У меня есть приложение, которое ведет себя по-разному, когда я запускаю его на STS, используя «Run As — Spring Boot App», по сравнению с запуском его в командной строке с помощью «bootRun» или с помощью «java -jar». В чем может быть разница? В частности, когда я запускаю с помощью bootRun, он не использует Spring Session. Он использует управление сеансами Tomcat. При запуске на STS он использует весеннюю сессию.
4. Вы набрали все это из своей головы?
5. Я сравнил цель для запуска с maven (mvn spring-boot:run) и файл jar для запуска с jar ( java -jar *.jar). Оба включают путь к классу, библиотеку, конфигурацию и то же самое. Я не видел никакой разницы.