Статьи

Spring Boot / Java 8 / Tomcat 8 на Openshift с DIY

DIY картридж — это экспериментальный картридж, который позволяет тестировать неподдерживаемые языки в OpenShift. Он предоставляет минимальные леса свободной формы, которые оставляют все детали картриджа разработчику приложения . Этот блог рассказывает об использовании приложения Spring Boot / Java 8 / Tomcat 8 с привязанным к нему сервисом PostgreSQL.

Создание нового приложения

необходимое условие

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

Шаг 1: Создайте приложение DIY

Чтобы создать приложение с помощью клиентских инструментов, введите следующую команду:

1
rhc app create boot diy-0.1

Эта команда создает загрузку приложения с использованием DIY- картриджа и клонирует репозиторий в каталог загрузки .

Шаг 2: Добавьте картридж PostgreSQL в приложение

Приложение, которое мы создаем, будет использовать базу данных PostgreSQL, поэтому нам нужно добавить соответствующий картридж в приложение:

1
rhc cartridge add postgresql-9.2 --app boot

После создания картриджа можно проверить его состояние с помощью следующей команды:

1
rhc cartridge status postgresql-9.2 --app boot

Шаг 3: Удалить исходный код приложения шаблона

OpenShift создает шаблон проекта, который можно свободно удалить:

1
git rm -rf .openshift README.md diy misc

Зафиксируйте изменения:

1
git commit -am "Removed template application source code"

Шаг 4: извлечение исходного кода из GitHub

1
2
git remote add upstream https://github.com/kolorobot/openshift-diy-spring-boot-sample.git
git pull -s recursive -X theirs upstream master

Шаг 5: Нажмите изменения

Базовый шаблон готов к отправке:

1
git push

Первоначальное развертывание (сборка и запуск приложения) займет некоторое время (до нескольких минут). Последующие развертывания выполняются немного быстрее, хотя запуск приложения Spring Boot на небольшом Gear может занять даже более 2 минут:

1
2
Tomcat started on port(s): 8080/http
Started Application in 125.511 seconds

Теперь вы можете перейти по адресу : http://boot-yournamespace.rhcloud.com/manage/health, и вы должны увидеть:

1
2
3
4
5
{
    "status": "UP",
    "database": "PostgreSQL",
    "hello": 1
}

Вы также можете просматривать API. Чтобы узнать, какие у вас есть варианты, перейдите в корень приложения. Вы должны увидеть корень ресурса со ссылками на доступные ресурсы:

1
2
3
4
5
6
7
8
{
  "_links" : {
    "person" : {
      "href" : "http://boot-yournamespace.rhcloud.com/people{?page,size,sort}",
      "templated" : true
    }
  }
}

Переход на http://boot-yournamespace.rhcloud.com/people должен вернуть всех людей из базы данных.

Шаг 6: Добавление Дженкинса

Использование Jenkins имеет ряд преимуществ. Одним из них является то, что сборка происходит в своем собственном Gear. Для сборки с Jenkins OpenShift требуется сервер и клиентский картридж Jenkins, прикрепленный к приложению. Создание приложения Jenkins:

1
rhc app create ci jenkins

И присоединение клиента Jenkins к приложению:

1
rhc cartridge add jenkins-client --app boot

Теперь вы можете перейти по адресу : http: // ci- .rhcloud.com и войти в систему с предоставленными учетными данными. Когда вы сделаете следующие изменения и нажмете их, сборка будет запущена Jenkins:

1
2
3
4
5
remote: Executing Jenkins build.
remote:
remote: You can track your build at https://ci-<namespace>.rhcloud.com/job/boot-build
remote:
remote: Waiting for build to schedule.........

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

Под капотом

Почему сделай сам?

Приложение Spring Boot можно развернуть на картридж Tomcat в OpenShift. Но на данный момент нет поддержки Tomcat 8 и Java 8, поэтому был выбран DIY. Сделай сам имеет ограничения: его нельзя масштабировать, например. Но он идеально подходит для попыток играть с новыми вещами.

Структура приложения

Приложение является обычным приложением Spring Boot, которое можно загрузить с помощью http://start.spring.io . Используемая система сборки Maven, тип упаковки Jar. Tomcat 8 с Java 8 используется. Spring Boot по умолчанию использует Tomcat 7, для его изменения было добавлено следующее свойство:

1
2
3
<properties>
    <tomcat.version>8.0.9</tomcat.version>
</properties>

Maven был выбран, поскольку в настоящее время только OpenShift может использовать Gradle 1.6. Это связано с ошибкой в Gradle . Gradle 2.2 исправляет эту проблему.

Maven settings.xml

Файл settings.xml очень важен, так как содержит местоположение репозитория Maven: ${OPENSHIFT_DATA_DIR}/m2/repository .

В OpenShift права на запись находятся только в $ OPENSHIFT_DATA_DIR.

Конфигурация источника данных

Приложение использует Spring Data REST для экспорта репозиториев через REST. Требуемые зависимости:

  • spring-boot-starter-data-jpa — конфигурация репозиториев
  • spring-boot-starter-data-rest — отображение хранилищ над REST
  • hsqldb — для поддержки встроенной базы данных
  • postgresql — для поддержки PostgreSQL. Поскольку в настоящее время OpenShift использует PostgreSQL 9.2, используется соответствующая версия драйвера

Общие свойства — application.properties

По умолчанию (профиль по умолчанию, src/main/resources/application.properties ) приложение будет использовать встроенный HSQLDB и заполнит его src/main/resources/data.sql . Файл данных будет работать как на HSQLDB, так и на PostrgeSQL, поэтому нам не нужно предоставлять файлы, специфичные для платформы (это возможно в Spring Boot).

  • spring.datasource.initialize = true необходимо использовать, поэтому Spring Boot забирает файл данных и загружает его в базу данных.
  • spring.jpa.generate-ddl = true гарантирует, что схема будет экспортирована.

Свойства OpenShift — application-openshift.properties

Конкретная конфигурация OpenShift ( src/main/resources/application-openshift.properties ) позволяет использовать сервис PostgreSQL. Конфигурация использует переменные OpenShift env для настройки свойств соединения:

  • $ OPENSHIFT_POSTGRESQL_DB_HOST — для хоста базы данных
  • $ OPENSHIFT_POSTGRESQL_DB_PORT — для порта базы данных
  • $ OPENSHIFT_APP_NAME — для имени базы данных
  • $ OPENSHIFT_POSTGRESQL_DB_USERNAME — для имени пользователя базы данных
  • $ OPENSHIFT_POSTGRESQL_DB_PASSWORD — для пароля базы данных

Spring позволяет использовать переменные env непосредственно в свойствах с синтаксисом ${} , например:

1
spring.datasource.username = ${OPENSHIFT_POSTGRESQL_DB_USERNAME}

Чтобы Spring Boot активировал профиль OpenShift, свойство spring.profiles.active передается приложению при запуске: java -jar <name>.jar --spring.profiles.active=openshift .

Вход в OpenShift

Файл журнала будет сохранен в $ OPENSHIFT_DATA_DIR:

1
logging.file=${OPENSHIFT_DATA_DIR}/logs/app.log

Привод

Путь контекста управления по умолчанию для привода / . Это изменилось на /manage , потому что OpenShift предоставляет конечную точку /health , которая покрывает конечную точку /health привода.

1
management.context-path=/manage

OpenShift action_hooks

OpenShift выполняет файлы сценариев хуков действия в определенных точках в процессе развертывания. Все хуки размещаются в .openshift/action_hooks в хранилище приложений. Файлы должны быть исполняемыми. В Windows в Git Bash можно использовать следующую команду:

1
git update-index --chmod=+x .openshift/action_hooks/*

Развертывание приложения

Сценарий deploy загружает Java и Maven, создает несколько каталогов и экспортирует пару переменных среды, необходимых для правильного запуска сборки Java 8 / Maven.

Последняя команда развертывания — запуск целей Maven:

1
mvn -s settings.xml clean install

Запуск приложения

Когда сценарий deploy завершается успешно, target каталог будет содержать один jar с собранным приложением Spring Boot. Приложение запускается и привязывается к адресу и порту сервера, предоставленным OpenShift. Кроме того, предоставляется имя профиля, поэтому будет создан действительный источник данных. Последняя команда, которая запускает приложение:

1
nohup java -Xms384m -Xmx412m -jar target/*.jar --server.port=${OPENSHIFT_DIY_PORT} --server.address=${OPENSHIFT_DIY_IP} --spring.profiles.active=openshift &

Остановка приложения

Сценарий stop ищет Java-процесс, и когда он его находит … вы знаете, что происходит.

Резюме

Я очень доволен оценкой OpenShift с картриджем Do It Yourself. Не все прошло гладко, как я ожидал, в основном из-за ограничений памяти на малых Gear. Я потратил некоторое время, чтобы понять это и иметь правильную конфигурацию. Но, тем не менее, OpenShift с DIY стоит того, чтобы попробовать и поиграть с ним некоторое время. Тем более, что начать работу совершенно бесплатно.

использованная литература