Как развернуть spring приложение на сервере
Перейти к содержимому

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

  • автор:

Разверните 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 прлоижение на сервер?

Дорбого времени суток, изучаю спринг, хочу попробвать игрушечные мини сайтик (чисто для себя и учебных целей, чтобы не только на локальном сервере через intelliJIDEA запускать, а еще уметь вот так вот, сразу на хост) залить на сервер/хостинг. Как это сделать? Что для этого надо?
Я погуглил, нагуглил, что надо покупать хостинг VPS (что очень дорого для обычных тестов лабы1 лабы2) и там через apache уже ставить. Есть ли еще способы, менее затратные?

  • Вопрос задан более трёх лет назад
  • 1388 просмотров

Комментировать

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

Ответы на вопрос 3

Попробуйте heroku. Там есть инструкция для maven и gradle
Платформа берет ваш исходный код из репозитория и разворачивает на своих серверах. За поиграться платить не придется

Ответ написан более трёх лет назад

Комментировать

Нравится 1 Комментировать

thexaver

Hetzner cloud, vscale, reg.ru, все они с почасовой оплатой

Ответ написан более трёх лет назад

Как развернуть проект Spring Boot на сервере

Spring Boot — это фреймворк Java для разработки масштабируемых и высокопроизводительных веб-приложений. Он позволяет разрабатывать приложения с минимальным количеством настроек и предоставляет встроенные инструменты для автоматической конфигурации и управления приложением.

Одним из ключевых преимуществ Spring Boot является его возможность быстро и легко развернуть приложение на сервере. В этой статье мы рассмотрим несколько шагов, которые нужно выполнить для успешного разворачивания проекта Spring Boot на сервере.

Во-первых, необходимо убедиться, что на сервере установлен Java Development Kit (JDK). Spring Boot требует JDK версии 8 или выше для корректной работы. Если на сервере отсутствует JDK, его можно скачать с официального сайта Oracle и установить согласно инструкциям.

Далее следует установить среду разработки, если она еще не установлена. Рекомендуется использовать IntelliJ IDEA или Eclipse, поскольку они предоставляют ряд инструментов и плагинов, специально разработанных для работы с проектами Spring Boot. После установки среды разработки следует открыть проект Spring Boot и проверить его работоспособность на локальном компьютере перед развертыванием на сервере.

Развертывание проекта Spring Boot на сервере

Шаг 1: Установка и настройка сервера

Перед развертыванием проекта Spring Boot вам необходимо установить и настроить сервер. Вы можете использовать серверы, такие как Apache Tomcat или Jetty. Следуйте инструкциям по установке выбранного вами сервера.

Шаг 2: Создание исполняемого JAR-файла

Для развертывания проекта Spring Boot на сервере вам необходимо создать исполняемый JAR-файл. Вы можете сделать это с помощью инструмента упаковщика, предоставляемого Spring Boot. Откройте командную строку или терминал и выполните следующую команду:

Команда Описание
mvn package Создает исполняемый JAR-файл в папке target вашего проекта.

Шаг 3: Загрузка JAR-файла на сервер

После создания исполняемого JAR-файла вам необходимо загрузить его на сервер. Для этого вы можете использовать протоколы передачи файлов, такие как File Transfer Protocol (FTP) или Secure Copy (SCP). Убедитесь, что вы имеете доступ к серверу и права на загрузку файлов.

Шаг 4: Запуск проекта на сервере

После успешной загрузки JAR-файла на сервер вам необходимо запустить проект. Вы можете использовать команду запуска из командной строки или терминала. Допустим, ваш JAR-файл называется «myproject.jar». Выполните следующую команду:

Команда Описание
java -jar myproject.jar Запускает проект Spring Boot на сервере.

Поздравляю! Ваш проект Spring Boot успешно развернут на сервере. Теперь вы можете получить доступ к нему с помощью URL-адреса сервера и порта, на котором работает ваш проект.

В этой статье мы рассмотрели основные шаги по развертыванию проекта Spring Boot на сервере. Надеюсь, что этот материал был вам полезен и поможет вам успешно развернуть ваш проект на сервере.

Проверка требований

Перед развертыванием проекта Spring Boot на сервере необходимо убедиться, что сервер и все необходимые зависимости соответствуют требованиям приложения.

Вот некоторые основные требования, которые нужно проверить:

  • Java Development Kit (JDK): убедитесь, что на сервере установлена поддерживаемая версия JDK. Проверьте переменную среды JAVA_HOME, чтобы убедиться, что указан путь к установленной JDK.
  • Сервер приложений: Spring Boot может развертываться на любом сервере, который поддерживает Java Servlet API. Некоторые из популярных серверов, с которыми совместим Spring Boot, включают Apache Tomcat, Jetty и Undertow. Убедитесь, что сервер приложений установлен и настроен на сервере.
  • База данных: если ваше приложение использует базу данных, убедитесь, что нужная база данных установлена и настроена на сервере. Проверьте правильность настроек подключения к базе данных в конфигурационных файлах приложения.
  • Версия Spring Boot: убедитесь, что используется поддерживаемая версия Spring Boot. Проверьте файл pom.xml или build.gradle проекта, чтобы убедиться, что указана правильная версия Spring Boot.

Проверка требований перед развертыванием проекта Spring Boot на сервере поможет избежать потенциальных проблем при запуске приложения. Перед следующим этапом развертывания убедитесь, что все требования выполнены в соответствии с указанными рекомендациями.

Выбор сервера развертывания

Одним из наиболее популярных серверов для развертывания проектов на Spring Boot является Apache Tomcat. Tomcat является легковесным, простым в использовании и широко распространенным решением для многих Java-приложений. Если проект предполагает небольшую нагрузку и не требует сложной конфигурации, то Tomcat может быть отличным выбором.

Если проект имеет большую нагрузку и требует скорости и отзывчивости, стоит рассмотреть использование более мощных серверов. Например, серверы WildFly или JBoss позволяют более гибко настроить и масштабировать приложение. Они обеспечивают поддержку Java EE и дают возможность использовать дополнительные функции, такие как распределенные транзакции и кластеризация.

Также вариантом может быть использование сервера WebSphere Application Server или WebLogic, которые предоставляют широкие возможности для масштабирования и полную поддержку стандартов Java EE. Однако, эти серверы являются более сложными в настройке и требуют больше ресурсов для работы.

В конечном счете, выбор сервера развертывания зависит от требований проекта и его ожидаемой нагрузки. Необходимо учитывать требования к производительности, функциональности и возможностям масштабирования при выборе сервера для развертывания проекта Spring Boot.

Установка и настройка сервера развертывания

Перед развертыванием проекта Spring Boot на сервере необходимо установить и настроить серверное окружение. В данном разделе мы рассмотрим несколько важных этапов этого процесса.

1. Выбор сервера

Первым шагом является выбор сервера, на котором будет развернут проект. Для веб-приложений на Spring Boot наиболее популярными вариантами являются Tomcat, Jetty и Undertow. Каждый из этих серверов имеет свои особенности и подходит для определенных задач, поэтому необходимо выбрать оптимальный вариант, исходя из требований проекта.

2. Установка сервера

После выбора сервера необходимо установить его на серверное окружение. Для установки обычно требуется скачать дистрибутив сервера и выполнить инструкции по его установке, предоставленные разработчиками сервера.

3. Конфигурация сервера

После установки сервера необходимо настроить его для развертывания проекта Spring Boot. Конфигурационные файлы сервера варьируются в зависимости от выбранного сервера. Обычно требуется указать путь к WAR-файлу, а также порт, на котором будет доступно веб-приложение.

4. Развертывание проекта

После настройки сервера можно приступить к развертыванию проекта Spring Boot. Для этого необходимо собрать проект в исполняемый JAR-файл или WAR-файл с помощью инструментов сборки, таких как Maven или Gradle. Затем полученный файл необходимо разместить в директории сервера, указанной в конфигурационных файлах.

5. Проверка развертывания

После успешного развертывания проекта на сервере можно проверить его работоспособность. Для этого нужно запустить сервер и открыть веб-браузер с указанием URL-адреса, на котором доступно приложение. Если приложение отображается без ошибок, то развертывание прошло успешно.

С помощью этих шагов вы сможете установить и настроить серверное окружение для развертывания проекта Spring Boot.

Подготовка проекта Spring Boot

Прежде чем развернуть проект Spring Boot на сервере, необходимо выполнить несколько этапов подготовки проекта.

Шаг 1: Создание проекта

Создайте новый проект Spring Boot, используя вашу любимую интегрированную среду разработки (IDE) или инструмент командной строки, такой как Maven или Gradle. Убедитесь, что ваш проект содержит все необходимые зависимости для вашего приложения.

Шаг 2: Конфигурация приложения

Настройте ваше приложение Spring Boot, чтобы определить основные параметры, такие как порт сервера, базу данных и другие зависимости. Используйте файлы конфигурации, такие как application.properties или application.yml для определения настроек вашего приложения.

Шаг 3: Тестирование приложения

Перед развертыванием приложения на сервере рекомендуется протестировать его на локальной машине. Убедитесь, что ваше приложение работает должным образом и все функции выполняются корректно.

Шаг 4: Подготовка сервера

Перед развертыванием проекта Spring Boot на сервере убедитесь, что сервер имеет все необходимые компоненты, такие как Java Runtime Environment (JRE) или Java Development Kit (JDK). Установите и настройте сервер в соответствии с требованиями вашего проекта.

Шаг 5: Упаковка проекта

Упакуйте ваш проект Spring Boot в исполняемый файл WAR или JAR, в зависимости от требований вашего сервера. Это позволит вам легко развернуть ваше приложение на сервере.

Шаг 6: Развертывание проекта

Наконец, разверните ваш проект Spring Boot на сервере, следуя инструкциям вашего сервера. Убедитесь, что ваше приложение успешно развернуто и готово к обработке запросов.

Следуя этим шагам, вы будете готовы успешно развернуть ваш проект Spring Boot на сервере и запустить ваше приложение в продакшн-среде.

Создание исполняемого JAR-файла

Для развертывания проекта Spring Boot на сервере можно использовать исполняемый JAR-файл. В этом разделе мы рассмотрим, как создать такой файл и запустить его на сервере.

Создание исполняемого JAR-файла очень просто. Вам понадобится лишь добавить несколько строк кода в ваш файл с настройками проекта. В большинстве случаев эта настройка уже присутствует в файле pom.xml .

Вот как выглядит необходимый код:

    org.springframework.boot spring-boot-maven-plugin    

Этот фрагмент кода добавит плагин Spring Boot Maven Plugin в ваш проект. Он будет отвечать за создание исполняемого JAR-файла.

После добавления этого кода вы можете создать исполняемый JAR-файл с использованием команды Maven:

mvn clean package

Когда сборка будет завершена, вы найдете исполняемый JAR-файл в папке target вашего проекта.

Теперь вы можете скопировать этот JAR-файл на сервер и запустить его с помощью Java Runtime Environment (JRE).

Запустить JAR-файл можно с помощью следующей команды:

java -jar your-project.jar

После выполнения этой команды ваш сервер будет запущен, и ваш проект Spring Boot будет доступен для использования.

В этом разделе мы рассмотрели, как создать исполняемый JAR-файл для развертывания проекта Spring Boot на сервере. Это простой и удобный способ запустить ваш проект в продакшене.

Перенос и развертывание проекта на сервере

1. Подготовка сервера:

Перед развертыванием проекта необходимо подготовить сервер. Установите необходимое ПО и настройте конфигурацию сервера, включая базы данных, сервер приложений и другие компоненты, необходимые для работы приложения.

2. Подготовка проекта:

Перед развертыванием проекта на сервере необходимо убедиться, что его исходный код полностью скомпилирован и собран в исполняемый JAR-файл. Для этого можно использовать средства сборки такие, как Maven или Gradle.

3. Копирование проекта на сервер:

Скопируйте собранный JAR-файл на сервер. Для этого можно воспользоваться утилитами scp или rsync.

4. Запуск проекта на сервере:

На сервере выполните команду для запуска приложения. Например, для запуска приложения на Spring Boot можно использовать следующую команду:

java -jar your-project.jar

5. Проверка работоспособности проекта:

После запуска приложения убедитесь, что оно работает корректно. Проверьте доступность API и функциональность вашего проекта.

6. Настройка автоматического запуска проекта:

Чтобы ваш проект запускался автоматически при старте сервера или после перезагрузки, необходимо настроить автозапуск. В Linux можно использовать скрипт init.d или systemd, а в Windows — планировщик задач.

7. Мониторинг и обновление проекта:

После развертывания проекта на сервере следите за его работоспособностью и производительностью. При необходимости внесите изменения, апдейты и обновления проекта.

В итоге, развертывание проекта на сервере является важной задачей, которая требует определенных этапов и настроек. Следуйте указанным шагам, чтобы успешно развернуть проект на сервере и обеспечить его корректную и стабильную работу.

Настройка и тестирование сервера

После того, как вы развернули свой проект Spring Boot на сервере, необходимо проверить его работоспособность. Для этого важно настроить сервер и протестировать ваше приложение. В данном разделе мы рассмотрим этот процесс.

Первым шагом необходимо настроить сервер для работы с вашим проектом. В большинстве случаев это означает настройку сервера приложений, такого как Apache Tomcat или WildFly. Вы должны указать путь к вашему WAR-файлу и настроить порт, на котором будет запущено ваше приложение.

Затем, чтобы протестировать сервер, вы можете использовать различные инструменты и подходы. Самый простой способ — открыть браузер и ввести URL вашего приложения. Если вы видите страницу приветствия или другое ожидаемое содержимое, значит ваш сервер работает корректно.

Однако, более профессиональный подход — использовать инструменты автоматического тестирования, такие как JUnit или Selenium. С помощью этих инструментов вы можете написать тесты, которые проверят работу вашего приложения после развертывания на сервере. Например, вы можете проверить, что определенные страницы доступны по соответствующим URL-адресам, или что определенные операции выполняются корректно.

Помимо инструментов автоматического тестирования, вы также можете использовать специальные инструменты для проверки производительности вашего сервера. Например, вы можете отправить большое количество запросов на ваше приложение и измерить время, затраченное на обработку каждого запроса. Такие инструменты могут помочь вам оптимизировать производительность вашего сервера.

Наконец, не забудьте установить мониторинг вашего сервера. Это позволит вам отслеживать его работу и обнаруживать проблемы, если они возникают. Существуют различные инструменты мониторинга, которые могут предоставить вам информацию о загрузке сервера, использовании ресурсов и прочих метриках.

Поддержка и обновление проекта

Ключевыми этапами поддержки и обновления проекта являются:

Этап Описание
Обнаружение проблем В этом этапе осуществляется поиск и анализ проблем, возникающих в проекте. Мониторинг и логирование помогут выявить ошибки и узкие места в проекте.
Исправление ошибок На этом этапе выполняется исправление ошибок, выявленных на предыдущем этапе. Ошибки могут быть исправлены путем изменения кода, обновления зависимостей или внесения изменений в конфигурации проекта.
Добавление новых функций При необходимости в проекте могут быть добавлены новые функции. Это может включать создание новых модулей, разработку API или добавление новых страниц в интерфейс проекта.
Улучшение производительности На этом этапе проводится работа по оптимизации производительности проекта. Это может включать улучшение работы базы данных, оптимизацию запросов к базе данных или кода проекта.
Тестирование После внесения изменений необходимо провести тестирование проекта. Это может включать модульное тестирование, интеграционное тестирование и тестирование нагрузки.
Развертывание на сервере После успешного тестирования проекта, обновленная версия может быть развернута на сервере. Для этого используются инструменты вроде Docker или Kubernetes.

Цикл поддержки и обновления проекта может повторяться несколько раз, в зависимости от потребностей и изменений требований к проекту.

Spring Boot: от начала до продакшена


В данной статье я попробую расписать все шаги, которые потребуются для создания небольшого проекта на Spring Boot и развертывания его на боевом сервере.

Не будем тянуть долгими прелюдиями о философии java и spring’а, и сразу приступим к делу.

Для начала нам необходимо создать каркас приложения, внедрив туда весь необходимый зоопарк технологий(как минимум Spring, JPA, JDBC). До появления spring boot нужно было потратить на это немало времени, если конечно у вас не было рабочей заготовки в закромах кода. И именно сложность создания подобного каркаса, как мне кажется, останавливает многих от разработки небольших веб-проектов на java. Конечно, когда-то был хромой spring roo, который мог создать подобный каркас в ущерб производительности(привет аспектам), но даже с ним количество и сложность конфигурационных файлов заставляли долго медитировать над ними неподготовленного разработчика. Однако теперь с приходом Boot и Spring 4 жизнь стала немного проще и количество конфигурационных файлов заметно уменьшилось.

Если у вас есть Intellij Idea 14.1, то проблем с каркасом возникнуть вообще не должно, можно все сделать через специальный мастер создания проектов(File-New-Project. -Spring Initializr). Далее останется только указать названия проектов, выбрать интересующие нас технологии(Web, JDBC, JPA, PostgreSQL) и создать проект.

Если же у вас нет данной IDE, то скачиваем Spring Boot CLI, следуем инструкции в INSTALL.txt. Нужно задать системную переменную SPRING_HOME(путь к папке со Spring Boot, не к папке bin!) и добавить путь к SPRING_HOME/bin в системную переменную PATH на windows.

Итак, консоль спринга настроили, теперь самое время создать проект. Сделать это можно следующей командой:

spring init --dependencies=web,data-jpa,jdbc yourapp 

UPDATE
Кроме того, как написали в комментариях, существует еще веб-конструктор: start.spring.io

Далее импортируем получившийся каркас в любимую IDE и начинаем его модифицировать под наши нужды.

Для начала добавим в каталог src/main папку webapps. Все веб-ресурсы мы будем создавать в ней, а не в папке resources, как хочет того спринг. Дело в том, что если мы будем создавать файлы в папке resources, то тогда мы лишимся возможности видеть изменения, сделанные в наших веб-ресурсах, без перезагрузки сервера. А это может быть неприятно, когда ради того, чтобы посмотреть изменившийся текст на веб-странице приходится перезапускать веб-сервер.

Теперь в папке webapps создаем файл index.html и папки css, js, font, images, в которые будем класть соответствующие ресурсы.

Для примера сделаем самый простой каркас index.html:

   Yourapp   

HELLO WORLD

Изменим файл pom.xml
Должно получиться что-то подобное:

  4.0.0 com.yourcompany yourapp 0.0.1-SNAPSHOT jar YourApp org.springframework.boot spring-boot-starter-parent 1.2.3.RELEASE  UTF-8 com.yourcompany.Application 1.8   org.springframework.boot spring-boot-starter-web  org.springframework.boot spring-boot-starter-data-jpa  org.springframework.boot spring-boot-starter-jdbc  com.zaxxer HikariCP  org.postgresql postgresql 9.4-1201-jdbc41 runtime  org.springframework.boot spring-boot-starter-test test     org.springframework.boot spring-boot-maven-plugin  maven-resources-plugin 2.6  copy-resources validate copy-resources  $/target/classes/static  src/main/webapp true          

Из pom-файла мы можем увидеть следующее:
Мы используем java 8(самое время ее попробовать). Наш класс приложения называется com.yourcompany.Application(не забудьте переименовать стандартно сгенерированный класс, который может называться к примеру DemoApplication).

Мы используем postgresql 9.4(тоже неплохо бы установить его локально на свою машину). Connection pool для взаимодействия с базой данных мы берем самый модный и производительный (HikariCP). Кроме того, мы используем специальный плагин, который, когда мы будем генерировать итоговый jar’ник, перенесет все наши данные из webapp в resources/static, как того хочет spring boot. В противном случае вы не сможете увидеть все те веб-страницы, что создадите в папке webapps, когда запустите jar-ник.

Добавим пакет config и создадим в нем класс JpaConfig:

@Configuration @EnableTransactionManagement @EnableJpaRepositories(basePackageClasses = Application.class) public class JpaConfig implements TransactionManagementConfigurer < @Value("$") private String driver; @Value("$") private String url; @Value("$") private String username; @Value("$") private String password; @Value("$") private String dialect; @Value("$") private String hbm2ddlAuto; @Bean public DataSource configureDataSource() < HikariConfig config = new HikariConfig(); config.setDriverClassName(driver); config.setJdbcUrl(url); config.setUsername(username); config.setPassword(password); return new HikariDataSource(config); >@Bean public LocalContainerEntityManagerFactoryBean configureEntityManagerFactory() < LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(configureDataSource()); entityManagerFactoryBean.setPackagesToScan("com.yourcompany"); entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); Properties jpaProperties = new Properties(); jpaProperties.put(org.hibernate.cfg.Environment.DIALECT, dialect); jpaProperties.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, hbm2ddlAuto); entityManagerFactoryBean.setJpaProperties(jpaProperties); return entityManagerFactoryBean; >@Bean public PlatformTransactionManager annotationDrivenTransactionManager() < return new JpaTransactionManager(); >> 

Кроме того, добавим в файл application.properties следующие строчки:

dataSource.driverClassName=org.postgresql.Driver dataSource.url=jdbc:postgresql://:5432/yourapp_data dataSource.username=postgres dataSource.password= hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect hibernate.hbm2ddl.auto=update 

И наконец в Application.java меняем строку инициализации на следующую:

SpringApplication.run(new Class[] , args); 

Тем самым мы настроили подключение к СУБД PostgreSQL.

Не забываем создать саму базу данных и простенькую таблицу в ней. Сделать это удобнее всего через PgAdmin.
Создав в ней пустую базу yourapp_data, выполняем скрипт создания таблицы:

CREATE TABLE yourapp_data ( data_id uuid NOT NULL, data_description character varying(100) NOT NULL, CONSTRAINT yourapp_data_pk PRIMARY KEY (data_id) ) WITH ( OIDS=FALSE ); ALTER TABLE yourapp_data OWNER TO postgres; 

Теперь настало время немного заняться начинкой нашего проекта. А именно добавить какую-нибудь сущность БД и научиться с ней работать, получая с клиента данные для ее формирования и отправляя клиенту же данные об уже созданных сущностях.

Создаем пакеты controller, entity, repository, service, utils.

В пакете entity создаем интерфейс:

public interface DomainObject extends Serializable

и сущность:

public class Data implements DomainObject < private UUID id; private String description; public Data(UUID id, String description) < this.id = id; this.description = description; >public UUID getId() < return id; >public void setId(UUID id) < this.id = id; >public String getDescription() < return description; >public void setDescription(String description) < this.description = description; >> 

Аннотации JPA и Hibernate в данном примере использовать не будем, так как эти технологии сильно замедляют работу(запрос может выполняться в 10 раз медленнее, чем на чистом jdbc), а так как у нас нет сильно сложных сущностей, для которых реально может потребоваться ORM, то воспользуемся обычным jdbcTemplate.

Создаем интерфейс репозитория:

public interface DataRepository  < void persist(V object); void delete(V object); SetgetRandomData(); > 

И его реализацию:

@org.springframework.stereotype.Repository("dataRespitory") public class DataRepositoryImpl implements DataRepository < @Autowired protected JdbcOperations jdbcOperations; @Override public void persist(Data object) < Object[] params = new Object[] < object.getId(), object.getDescription() >; int[] types = new int[] < Types.VARCHAR, Types.VARCHAR >; jdbcOperations.update("INSERT INTO yourapp_data(\n" + " data_id, data_description)\n" + " VALUES (cast(? as UUID), ?);", params, types); > @Override public void delete(Data object) < jdbcOperations.update("DELETE FROM yourapp_data\n" + " WHERE data_id = '" + object.getId().toString() + "';"); >@Override public Set getRandomData() < Setresult = new HashSet<>(); SqlRowSet rowSet = jdbcOperations.queryForRowSet("SELECT data_description FROM yourapp_data p ORDER BY RANDOM() LIMIT 50;"); while (rowSet.next()) < result.add(rowSet.getString("data_description")); >return result; > > 

Вместо уже упомянутого jdbcTemplate, мы, как видите, используем JdbcOperations, который является его интерфейсом. Нам приходится использовать везде интерфейсы, отделяя их от реализации, так как, во-первых это стильно, модно, молодежно, а во-вторых, spring в нашем случае использует стандартный jdk’шный Proxy для наших объектов, поэтому напрямую инжектить реализацию не получиться, пока мы не введем полноценные аспекты и AspectJ compile-time weaving. В нашем случае этого и не требуется, чтобы не перегружать приложение.

Осталось уже немного. Создаем наш сервис(мы же хорошие разработчики и должны отделить бизнес-логику от логики работы с СУБД?).

public interface DataService < public boolean persist(String problem); public SetgetRandomData(); > 

Реализация:

@Service("dataService") public class DataServiceImpl implements DataService < private static final Logger LOG = LoggerFactory.getLogger(DataServiceImpl.class); @Autowired @Qualifier("dataRespitory") private DataRepository dataRepository; @Override public boolean persist(String problem) < try < dataRepository.persist(new Data(UUID.randomUUID(), problem)); return true; >catch (Exception e) < LOG.error("ERROR SAVING DATA: " + e.getMessage(), e); return false; >> @Override public Set getRandomData() < return dataRepository.getRandomData(); >> 

Отлично. Теперь создаем пару вспомогательных классов, необходимых для реализации контроллера:

public class RestException extends Exception < public RestException() < >public RestException(String message) < super(message); >public RestException(String message, Throwable cause) < super(message, cause); >public RestException(Throwable cause) < super(cause); >public RestException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) < super(message, cause, enableSuppression, writableStackTrace); >> 

Это наша реализация Exception’а. Может пригодиться в будущем, хотя и не обязательна, но на нее завязан следующий класс:

@Controller public class ExceptionHandlerController < private static final Logger LOG = Logger.getLogger(ExceptionHandlerController.class); @ExceptionHandler(RestException.class) public @ResponseBody String handleException(RestException e) < LOG.error("Ошибка: " + e.getMessage(), e); return "Ошибка: " + e.getMessage(); >> 

Если мы словили такую ошибку в нашем контроллере, то она будет обработана дополнительно в этом методе.
Наконец напишем небольшой классик, который будет формировать структуру данных для передачи на клиент:

public class Ajax < public static MapsuccessResponse(Object object) < Mapresponse = new HashMap(); response.put("result", "success"); response.put("data", object); return response; > public static Map emptyResponse() < Mapresponse = new HashMap(); response.put("result", "success"); return response; > public static Map errorResponse(String errorMessage) < Mapresponse = new HashMap(); response.put("result", "error"); response.put("message", errorMessage); return response; > > 

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

@Controller public class DataController extends ExceptionHandlerController < private static final Logger LOG = Logger.getLogger(DataController.class); @Autowired @Qualifier("dataService") private DataService dataService; @RequestMapping(value = "/persist", method = RequestMethod.POST) public @ResponseBody Mappersist(@RequestParam("data") String data) throws RestException < try < if (data == null || data.equals("")) < return Ajax.emptyResponse(); >dataService.persist(data); return Ajax.emptyResponse(); > catch (Exception e) < throw new RestException(e); >> @RequestMapping(value = "/getRandomData", method = RequestMethod.GET) public @ResponseBody Map getRandomData() throws RestException < try < Setresult = dataService.getRandomData(); return Ajax.successResponse(result); > catch (Exception e) < throw new RestException(e); >> > 

В нем два метода — сохранить полученные данные и выдать порцию случайных данных на клиент. Контроллер унаследован от созданного нами ранее ExceptionHandlerController. Обработка исключений написана только как шаблон и нуждается в соответствующей доработки под себя.

Итак, основная часть серверного кода написана, осталось проверить его работу на клиенте. Для этого нужно доработать наш файл index.html и заодно добавить библиотеку jquery в каталог js.
index.html:

    YourApp    

HELLO WORLD

POST GET

Да, UI получился не бог весть каким красивым, но зато с его помощью мы можем проверить работу приложения.
Запустим наш проект. В Intellij Idea это можно сделать через специальную конфигурацию запуска(Spring Boot).
Если все сделано верно, то по адресу localhost:8080 вы сможете увидеть заголовок Hello World, строку ввода и две кнопки. Попробуйте ввести что-нибудь в строку ввода и нажать на кнопку POST. Если после этого вы увидите аналогичный текст ниже поля ввода, то все работает как надо. Теперь останется модифицировать проект под свои нужды, добавить модный UI(например materializecss.com) и творить разумное, доброе, вечное.

Однако рано или поздно вы сотворите желаемое и встанет вопрос о том, как донести ваше детище в массы. Об этом будет вторая часть статьи.

Начнем с малого, но важного.
Даже если проект небольшой, все равно для него потребуется свой домен. Если вы просто обкатываете какую-нибудь идею и не хотите тратить бешеные деньги для регистрации домена на том же godaddy, то можете воспользоваться бесплатной альтернативой: freenom.com

Этот сервис позволит бесплатно зарегистрировать домен в зонах .tk, .ml, .ga, .cf, .gq
Да, не самые лучшие зоны, но:

Далее займемся сервером, где все это будет крутиться. Так как проект у нас небольшой, то и сервер нам сгодится небольшой. В идеале хватит VPS. Достать его можно в разных местах, например www.digitalocean.com
Итак, регистрируемся, создаем самый простой дроплет и ставим на него ubuntu (в моем случае это ubuntu 12.04, дальнейшие инструкции буду описывать для этой системы, но на остальных будет примерно то же)

Отлично, у нас есть сервер, пора залить на него наш проект.

Для начала собираем проект maven’ом. Сделать это можно через IDE или же на худой конец зайдя в корневую директорию проекта и введя команду mvn clean install(путь к мавену должен быть прописан в системой переменной path на Windows). После выполнения команды собранный jar’ник помещается в локальный репозиторий (по умолчанию именуемый .m2), откуда его можно стянуть для отправки на сервер.

Для передачи файла на сервер используем WinSCP, если вы работаете под Windows.
Далее заходим на наш сервер, используя putty на Windows или ssh на Linux.
Переходим в директорию, куда был скопирован наш jar-ник и пробуем его запустить командой java -jar youapp.jar

Скорей всего, не получилось. А все почему? Наш проект был создан на java 8, а какая java стоит на сервере, можно узнать с помощью команды java -version. И скорей всего это либо 6, либо 7.

Но не будем унывать, поставим себе новую версию:

sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer 

Теперь настала очередь postgres’а. До этого мы использовали локальную версию на машине разработчика, теперь пришло время поставить СУБД на сервер.

Для этого сначала выполняем магическую последовательность команд:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' sudo apt-get install wget ca-certificates wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get upgrade sudo apt-get install postgresql-9.4 postgresql-contrib-9.4 

Запускаем postgres:

sudo service postgresql start

Далее выполняем команду входа в psql:

sudo -u postgres psql

Устанавливаем пароль:

\password postgres

И выходим c помощью команды \q

Редактируем файл /etc/postgresql/9.4/main/postgresql.conf, изменив строчку #listen_addresses = ‘localhost’ на listen_addresses = ‘*’
Тем самым мы сможем подключаться к postgresql извне с помощью pgadmin’а. Хотя, конечно, желательно этого избежать в целях безопасности, и когда все будет настроено и отлажено, отключить эту возможность.

Затем редактируем файл /etc/postgresql/9.4/main/pg_hba.conf
Должны быть добавлены две новых строчки и изменена одна строка для 127.0.0.1 следующим образом:

host all all 127.0.0.1/32 trust host all all /32 trust host all all /32 trust 

Я намеренно изменил md5 на trust, так как лично у меня были проблемы с запуском проекта, тем самым отключив проверку пароля для заданных адресов. Возможно у вас их не будет.

Теперь все настроено. Хотя тюнинговать постгрес можно до бесконечности, но ведь у нас всего лишь маленький проект, а значит, пока оставим как есть.

 sudo service postgresql restart 

и проверяем его работу.

Всё, с настройкой postgres’а закончили, что у нас дальше по сценарию?

Как уже было отмечено ранее, для запуска собранного jar’ника вполне достаточно команды java -jar youapp.jar
Однако при подобном запуске для того, чтобы зайти на сайт извне, придется прописывать порт(по умолчанию 8080). Чтобы пользователи смогли зайти на сайт, просто введя его адрес, то нам потребуется прокси сервер. В качестве него можно взять nginx, который нужно будет предварительно настроить.

sudo apt-get install nginx 

В моем случае корневой директорией nginx была /etc/nginx. Там нам в первую очередь потребуется изменить файл /sites_available/default следующим образом:

server < listen 80; server_name youapp.com; location / < proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080/; >> 

Однако и это еще не все. Необходимо также модифицировать наш проект, чтобы он поддерживал настроенный нами прокси. Благо сделать это не трудно, достаточно лишь в application.properties добавить строки(не забудьте залить новую версию с изменениями):

server.tomcat.remote_ip_header=x-forwarded-for server.tomcat.protocol_header=x-forwarded-proto 

Теперь можно запустить nginx командой service nginx start и затем попробовать запустить наш проект. Он будет доступен по ссылке сайта, либо же, если вы еще не приобрели домен, то по его ip-адресу, без указания порта.

Остался еще один небольшой штрих. Немного неудобно всегда стартовать проект тем способом, который был описан выше. Неплохо бы, чтобы при старте проекта консоль ввода на сервере освобождалась, приложение не закрывалось бы после выхода из ssh-сессии и чтобы где-нибудь велись логи приложения. Сделать это можно с помощью команды nohup. Предварительно создаем bash-скрипт, называя его script.sh:

#!/bin/bash java -jar youapp.jar 

Прописываем ему право на исполнение:

chmod +x ./script.sh 

И запускаем командой:

nohup ./start.sh > log.txt 2>&1 & 

Все, приложение запущено.

Чтобы остановить приложение, можно либо воспользоваться командой pkill -9 java(при условии, что это единственное java-приложение, запущенное на сервере), либо с помощью утилиты htop, выделив этот процесс, нажав кнопку F9, выбрав слева в списке SIGKILL и нажав enter. На заметку: иногда не срабатывает с первого раза и процедуру приходится повторять.

Теперь, если все сделано правильно, можно открыть сайт нашего проекта в браузере и насладиться результатом.

P.S. Надеюсь, ничего не упустил. Если же найдете ошибку, просьба написать об этом в личном сообщении. Текст будет оперативно исправлен.

  • java
  • spring
  • spring boot
  • веб-разработка
  • все читают теги но зачем
  • Веб-разработка
  • Программирование
  • Java

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

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