Spring Boot. Генерация war и запуск в TomCat
Ситуация: использую Spring Boot . При запуске из под IDE , как я понимаю поднимается встроенный TomCat и в нем уже разворачивается приложение, все нормально работает, можно быстро протестировать итд. в этом как я понимаю и основное удобство Spring Boot . Теперь хочу задеплоить приложение на боевой сервер. Для этого генерирую war, который кстати прилично весит, и пытаюсь его развернуть. Получаю вот такую ошибку:
FAIL — Application at context path /test could not be started FAIL — Encountered exception org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/test]]
При запуске сервера в командной строке так же вижу слово SPRING в ascii art, что меня и наторлкнуло на мысль — а он случайно при развертывании моего приложения не поднимает на сервере сервер, может в этом и есть ошибка? Может быть war надо каким то по другому методом генерировать? Сейчас генерирую командой package . Вот pom.xml
org.springframework.boot spring-boot-starter-parent 1.5.1.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-maven-plugin
Кто использует Spring Boot подскажите пожалуйста, в чем моя ошибка, может я что то принципиально неверно делаю?
Развертывание приложения Spring в Службе приложений с использованием MySQL
Из этого руководства вы узнаете, как создавать, настраивать, развертывать и масштабировать веб-приложения Java, а также устранять неполадки с ними в Службе приложений в Linux.
Это руководство основано на популярном примере приложения PetClinic. В этом разделе вы протестируете версию HSQLDB приложения локально, а затем разверните ее в службе приложение Azure. После этого вы настроите и развернете версию, которая использует База данных Azure для MySQL. Наконец, вы узнаете, как получить доступ к журналам приложений и увеличить масштаб, увеличив число рабочих ролей, работающих в приложении.
Необходимые компоненты
Получение примера
Чтобы приступить к работе с примером приложения, клонируйте и подготовьте исходный репозиторий с помощью следующих команд.
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git cd spring-framework-petclinic
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git cd spring-framework-petclinic
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git cd spring-framework-petclinic
Сборка и запуск примера HSQLDB в локальной среде
Сначала мы протестируем пример локально, используя HSQLDB в качестве базы данных.
Создайте версию HSQLDB примера приложения.
mvn package
Затем присвойте переменной среды TOMCAT_HOME расположение установки Tomcat.
export TOMCAT_HOME=
$env:TOMCAT_HOME=""
set TOMCAT_HOME=
Затем обновите файл pom.xml для развертывания файла WAR. Добавьте следующий код XML в качестве дочернего узла существующего элемента . При необходимости измените 1.9.11 на текущую версию подключаемого модуля Cargo Maven 3.
org.codehaus.cargo cargo-maven3-plugin 1.9.11 tomcat9x installed $ existing $ $ $ war /
В такой конфигурации приложение можно развернуть локально в Tomcat.
mvn cargo:deploy
Затем запустите Tomcat.
$/bin/catalina.sh run
& $env:TOMCAT_HOME/bin/catalina.bat run
%TOMCAT_HOME%\bin\catalina.bat run
Теперь в браузере можно перейти по адресу http://localhost:8080 , чтобы увидеть работающее приложение и оценить его работу. По завершении нажмите клавиши CTRL+C в командной строке Bash, чтобы остановить Tomcat.
Развертывание в Службу приложений Azure
Теперь, когда приложение протестировано локально, его можно развернуть в Azure.
Сначала настройте следующие переменные среды. Для REGION используйте West US 2 или другие регионы, которые можно найти здесь.
export RESOURCEGROUP_NAME= export WEBAPP_NAME= export WEBAPP_PLAN_NAME=$-appservice-plan export REGION=
$env:RESOURCEGROUP_NAME="" $env:WEBAPP_NAME="" $env:WEBAPP_PLAN_NAME="$env:WEBAPP_NAME-appservice-plan" $env:REGION="" $env:SUBSCRIPTION_ID=""
set RESOURCEGROUP_NAME= set WEBAPP_NAME= set WEBAPP_PLAN_NAME=%WEBAPP_NAME%-appservice-plan set REGION= set SUBSCRIPTION_ID=
Maven будет использовать эти значения для создания ресурсов Azure с предоставленными вами именами. С помощью переменных среды можно хранить секреты учетной записи отдельно от файлов проекта.
Затем обновите файл pom.xml, чтобы настроить Maven для развертывания в Azure. Добавьте следующий код XML после добавленного ранее элемента . При необходимости измените 2.5.0 на текущую версию подключаемого модуля Maven для Службы приложений Azure.
com.microsoft.azure azure-webapp-maven-plugin 2.5.0 v2 $ $ $ $ P1v2 Linux Java 8 TOMCAT 9.0 $/target *.war
Затем войдите в Azure.
az login
После этого разверните приложение в Службе приложений в Linux.
mvn azure-webapp:deploy
Теперь вы можете перейти по адресу https://.azurewebsites.net (после замены ), чтобы увидеть работающее приложение.
Настройка Базы данных Azure для MySQL
Теперь вместо HSQLDB будет использоваться MySQL. Вам нужно будет создать экземпляр MySQL Server в Azure и добавить базу данных, а затем обновить конфигурацию приложения, используя новые сведения о подключении к базе данных.
Сначала настройте следующие переменные среды для дальнейшего использования.
export MYSQL_SERVER_NAME= export MYSQL_SERVER_FULL_NAME=$.mysql.database.azure.com export MYSQL_SERVER_ADMIN_LOGIN_NAME= export MYSQL_SERVER_ADMIN_PASSWORD= export MYSQL_DATABASE_NAME= export DOLLAR=\$
$env:MYSQL_SERVER_NAME="" $env:MYSQL_SERVER_FULL_NAME="$env:MYSQL_SERVER_NAME.mysql.database.azure.com" $env:MYSQL_SERVER_ADMIN_LOGIN_NAME="" $env:MYSQL_SERVER_ADMIN_PASSWORD="" $env:MYSQL_DATABASE_NAME="" $env:DOLLAR="$"
set MYSQL_SERVER_NAME= set MYSQL_SERVER_FULL_NAME=%MYSQL_SERVER_NAME%.mysql.database.azure.com set MYSQL_SERVER_ADMIN_LOGIN_NAME= set MYSQL_SERVER_ADMIN_PASSWORD= set MYSQL_DATABASE_NAME= set DOLLAR=$
Затем создайте и инициализируйте сервер базы данных. Выполните az mysql up для начальной настройки. Затем используйте az mysql server configuration set, чтобы увеличить время ожидания подключения и задать часовой пояс сервера.
az extension add --name db-up az mysql up \ --resource-group $ \ --server-name $ \ --database-name $ \ --admin-user $ \ --admin-password $ az mysql server configuration set --name wait_timeout \ --resource-group $ \ --server $ --value 2147483 az mysql server configuration set --name time_zone \ --resource-group $ \ --server $ --value=-8:00
az extension add --name db-up az mysql up ` --resource-group $env:RESOURCEGROUP_NAME ` --server-name $env:MYSQL_SERVER_NAME ` --database-name $env:MYSQL_DATABASE_NAME ` --admin-user $env:MYSQL_SERVER_ADMIN_LOGIN_NAME ` --admin-password $env:MYSQL_SERVER_ADMIN_PASSWORD az mysql server configuration set --name wait_timeout ` --resource-group $env:RESOURCEGROUP_NAME ` --server $env:MYSQL_SERVER_NAME --value 2147483 az mysql server configuration set --name time_zone ` --resource-group $env:RESOURCEGROUP_NAME ` --server $env:MYSQL_SERVER_NAME --value=-8:00
az extension add --name db-up az mysql up ^ --resource-group %RESOURCEGROUP_NAME% ^ --server-name %MYSQL_SERVER_NAME% ^ --database-name %MYSQL_DATABASE_NAME% ^ --admin-user %MYSQL_SERVER_ADMIN_LOGIN_NAME% ^ --admin-password %MYSQL_SERVER_ADMIN_PASSWORD% az mysql server configuration set --name wait_timeout ^ --resource-group %RESOURCEGROUP_NAME% ^ --server %MYSQL_SERVER_NAME% --value 2147483 az mysql server configuration set --name time_zone ^ --resource-group %RESOURCEGROUP_NAME% ^ --server %MYSQL_SERVER_NAME% --value=-8:00
Затем с помощью CLI MySQL подключитесь к базе данных в Azure.
mysql -u $@$ \ -h $ -P 3306 -p
mysql -u $env:MYSQL_SERVER_ADMIN_LOGIN_NAME@$env:MYSQL_SERVER_NAME ` -h $env:MYSQL_SERVER_FULL_NAME -P 3306 -p
mysql -u %MYSQL_SERVER_ADMIN_LOGIN_NAME%@%MYSQL_SERVER_NAME% ^ -h %MYSQL_SERVER_FULL_NAME% -P 3306 -p
В командной строке CLI MySQL выполните приведенную ниже команду, чтобы проверить, названа ли ваша база данных тем же именем, которое вы указали ранее для переменной среды MYSQL_DATABASE_NAME .
show databases;
Теперь вы можете использовать MySQL.
Настройка приложения для работы с MySQL
Теперь нужно добавить сведения о подключении к версии MySQL приложения и выполнить развертывание в Службе приложений.
Обновите файл pom.xml, чтобы включить MySQL в действующую конфигурацию. Удалите элемент из профиля H2 и поместите его в профиль MySQL, как показано ниже. В оставшейся части фрагмента кода показана существующая конфигурация. Обратите внимание, как настроенные ранее переменные среды используются Maven для настройки доступа к MySQL.
MySQL true mysql MYSQL com.mysql.jdbc.Driver jdbc:mysql://$:3306/$?useUnicode=true $@$ $ .
Затем обновите файл pom.xml, чтобы настроить Maven для развертывания в Azure и использования MySQL. Добавьте следующий код XML после добавленного ранее элемента . При необходимости измените 2.5.0 на текущую версию подключаемого модуля Maven для Службы приложений Azure.
com.microsoft.azure azure-webapp-maven-plugin 2.5.0 v2 $ $ $ $ P1v2 Linux Java 8 TOMCAT 9.0 MYSQL_SERVER_FULL_NAME $ MYSQL_SERVER_ADMIN_LOGIN_NAME $ MYSQL_SERVER_ADMIN_PASSWORD $ MYSQL_DATABASE_NAME $ $/target *.war
Затем выполните сборку приложения и протестируйте его локально, развернув и запустив с помощью Tomcat.
mvn package mvn cargo:deploy $/bin/catalina.sh run
mvn package mvn cargo:deploy & $env:TOMCAT_HOME/bin/catalina.bat run
mvn package mvn cargo:deploy %TOMCAT_HOME%\bin\catalina.bat run
Теперь приложение можно просмотреть локально, перейдя по адресу http://localhost:8080 . Приложение будет выглядеть и работать так же, как и раньше, но теперь оно использует базу данных Azure для MySQL вместо HSQLDB. По завершении нажмите клавиши CTRL+C в командной строке Bash, чтобы остановить Tomcat.
Наконец, разверните приложение в Службе приложений.
mvn azure-webapp:deploy
Теперь можно перейти по адресу https://.azurewebsites.net , чтобы увидеть работающее приложение, использующее Службу приложений и Базу данных Azure для MySQL.
Доступ к журналам приложения
Если необходимо устранить неполадки, можно просмотреть журналы приложения. Чтобы открыть удаленный поток журналов на локальном компьютере, используйте следующую команду.
az webapp log tail --name $ \ --resource-group $
az webapp log tail --name $env:WEBAPP_NAME ` --resource-group $env:RESOURCEGROUP_NAME
az webapp log tail --name %WEBAPP_NAME% ^ --resource-group %RESOURCEGROUP_NAME%
После завершения просмотра журналов нажмите клавиши CTRL+C, чтобы остановить поток.
Этот поток журналов также доступен по адресу https://.scm.azurewebsites.net/api/logstream .
Горизонтальное увеличение масштаба
Чтобы вы могли увеличить трафик в приложении, выполните горизонтальное увеличение масштаба до нескольких экземпляров с помощью следующей команды.
az appservice plan update --number-of-workers 2 \ --name $ \ --resource-group $
az appservice plan update --number-of-workers 2 ` --name $env:WEBAPP_PLAN_NAME ` --resource-group $env:RESOURCEGROUP_NAME
az appservice plan update --number-of-workers 2 ^ --name %WEBAPP_PLAN_NAME% ^ --resource-group %RESOURCEGROUP_NAME%
Поздравляем! Вы создали и масштабировали веб-приложение Java, используя Spring Framework, JSP, Spring Data, Hibernate, JDBC, Службу приложений в Linux и Базу данных Azure для MySQL.
Очистка ресурсов
Ранее вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду.
az group delete --name $
az group delete --name $env:RESOURCEGROUP_NAME
az group delete --name %RESOURCEGROUP_NAME%
Следующие шаги
Ознакомьтесь с другими вариантами конфигурации и вариантами CI/CD, доступными для Java в Службе приложений.
Разверните Spring Boot WAR на сервере Tomcat
Spring Boot — это соглашение о структуре конфигурации, которое позволяет нам создать готовую к работе установку проекта Spring, а Tomcat — один из самых популярных контейнеров сервлетов Java.
По умолчанию Spring Boot создает отдельное приложение Java, которое может работать как настольное приложение или настраиваться как системная служба, но есть среды, в которых мы не можем установить новую службу или запустить приложение вручную.
В отличие от автономных приложений, Tomcat устанавливается как служба, которая может управлять несколькими приложениями в рамках одного и того же прикладного процесса, что позволяет избежать необходимости специальной настройки для каждого приложения.
В этом руководстве мы создадим простое приложение Spring Boot и адаптируем его для работы в Tomcat.
2. Настройка приложения Spring Boot
Давайте настроим простое веб-приложение Spring Boot, используя один из доступных начальных шаблонов:
parent> groupId>org.springframework.bootgroupId> artifactId>spring-boot-starter-parentartifactId> version>2.4.0version> relativePath/> parent> dependencies> dependency> groupId>org.springframework.bootgroupId> artifactId>spring-boot-starter-webartifactId> dependency> dependencies>
Нет необходимости в дополнительных конфигурациях помимо стандартного @SpringBootApplication, поскольку Spring Boot позаботится о настройке по умолчанию.
Затем мы добавим простую REST EndPoint, чтобы возвращать нам допустимый контент:
@RestController public class TomcatController @GetMapping("/hello") public CollectionString> sayHello() return IntStream.range(0, 10) .mapToObj(i -> "Hello number " + i) .collect(Collectors.toList()); > >
Наконец, мы запустим приложение с помощью mvn spring-boot:run и запустим браузер по адресу http://localhost:8080/hello , чтобы проверить результаты.
3. Создание Spring Boot WAR
Контейнеры сервлетов ожидают, что приложения будут развернуты в соответствии с некоторыми контрактами. Для Tomcat контрактом является Servlet API 3.0 .
Чтобы наше приложение соответствовало этому контракту, мы должны внести небольшие изменения в исходный код.
Во-первых, нам нужно упаковать приложение WAR вместо JAR. Для этого мы изменим pom.xml следующим содержимым:
packaging>warpackaging>
Далее мы изменим окончательное имя файла WAR , чтобы не включать номера версий:
build> finalName>$ finalName> . build>
Затем мы добавим зависимость Tomcat:
dependency> groupId>org.springframework.bootgroupId> artifactId>spring-boot-starter-tomcatartifactId> scope>providedscope> dependency>
Наконец, мы инициализируем контекст сервлета, требуемый Tomcat, путем реализации интерфейса SpringBootServletInitializer :
@SpringBootApplication public class SpringBootTomcatApplication extends SpringBootServletInitializer >
Чтобы создать наше WAR-приложение, развертываемое с помощью Tomcat, мы выполним пакет mvn clean. После этого наш WAR-файл генерируется по адресу target/spring-boot-deployment.war (при условии, что артефакт Maven — «spring-boot-deployment»).
Мы должны учитывать, что эта новая настройка делает наше приложение Spring Boot неавтономным приложением (если мы хотим, чтобы оно снова работало в автономном режиме, мы можем удалить предоставленную область из зависимости tomcat).
4. Развертывание WAR на Tomcat
Чтобы наш файл WAR был развернут и запущен в Tomcat, нам необходимо выполнить следующие шаги:
- Загрузите Apache Tomcat и распакуйте его в папку tomcat .
- Скопируйте наш файл WAR из target/spring-boot-deployment.war в папку tomcat/webapps/
- В терминале перейдите в папку tomcat/bin и выполните
- catalina.bat запустить (в Windows)
- запуск catalina.sh (в системах на базе Unix)
- Перейдите по адресу http://localhost:8080/spring-boot-deployment/hello.
Это была быстрая установка Tomcat, поэтому ознакомьтесь с полным руководством по установке Tomcat . Существуют также дополнительные способы развертывания WAR-файла на Tomcat .
5. Вывод
В этой краткой статье мы создали простое приложение Spring Boot и превратили его в действительное приложение WAR, которое можно развернуть на сервере Tomcat.
Как всегда, полный исходный код примеров доступен на GitHub .
- 1. Введение
- 2. Настройка приложения Spring Boot
- 3. Создание Spring Boot WAR
- 4. Развертывание WAR на Tomcat
- 5. Вывод
Можно ли проект Spring запустить на удаленном сервере?
Я написал самое простое приложение на spring. Котрое принимает GET запрос и возвращает HTML страницу. На локалхлсте все работает. localhost:8080/index и он показывает страницу index.html
Так вот вопрос, можно ли как то запустить его на удаленном сервере, чтобы я мог например получать эту страницу по url — адресу, ну как все обычные веб приложения.
Если можно, то как? Можете привести пример?
- Вопрос задан более трёх лет назад
- 690 просмотров
1 комментарий
Простой 1 комментарий

Решения вопроса 1

Орхан Гасанлы @azerphoenix Куратор тега Java
Java Software Engineer
Здравствуйте!
Если кратко, то да, можно))))
А если подробно, то читайте дальше:
1) приложение Spring можно запустить на Томкат и т.д. Соответственно, нужен VPS, установите tomcat. А дальше соберите war проект и залейте на сервер.
https://docs.spring.io/spring-boot/docs/current/re.
2) можно развернуть приложение без стороннего софта (self-contained app)
https://docs.oracle.com/javase/8/docs/technotes/gu.
Если вы используете Intellij IDEA, то там при нажатии ПКМ (при условии, что вы уже настроили параметры деплоя), то можете сразу заливать проект на сервер из программы