Перейти к содержимому

Как запустить спринг приложение из под сервера tomcat

  • автор:

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, нам необходимо выполнить следующие шаги:

  1. Загрузите Apache Tomcat и распакуйте его в папку tomcat .
  2. Скопируйте наш файл WAR из target/spring-boot-deployment.war в папку tomcat/webapps/
  3. В терминале перейдите в папку tomcat/bin и выполните
  4. catalina.bat запустить (в Windows)
  5. запуск catalina.sh (в системах на базе Unix)
  6. Перейдите по адресу 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 комментарий

myjcom

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

azerphoenix

Орхан Гасанлы @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, то там при нажатии ПКМ (при условии, что вы уже настроили параметры деплоя), то можете сразу заливать проект на сервер из программы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *