Статьи

Весна на Героку


Развертывание вашего приложения в облаке — отличный способ масштабирования от «не было бы круто, если ..» до интервью с Forbes, Fast Company и Джимми Фаллоном.
Heroku упрощает предоставление всего, что вам нужно, в том числе
дополнения Neo4j . С помощью нескольких простых настроек ваше приложение Spring Data Neo4j готово сделать первый шаг в облако.

Давайте пройдемся по процессу, предполагая этот сценарий:

  • у вас есть аккаунт на Heroku , и вы установили инструмент heroku
  • мерзавец твой друг 
  • Вы разработали убийственное приложение  Spring MVC
  • и, конечно, вы используете Spring Data Neo4j 

Готовы? Хорошо, сначала давайте посмотрим на ваше приложение.

Содержание этой статьи было первоначально размещено в блоге Андреаса Коллеггера
Neo4j

Создайте веб-приложение для собственного размещения

Обычно приложение Spring MVC объединяется в войну и развертывается на сервере приложений, таком как Tomcat. Но Heroku может принимать любые Java-приложения; ему просто нужно знать, что запустить. Итак, мы преобразуем войну в самодостаточный сервлет с помощью встроенного сервера Jetty, а затем добавим стартовый скрипт для его запуска.

Сначала добавьте зависимости для Jetty в pom.xml:

<dependency>
  <groupid>org.eclipse.jetty</groupid>
  <artifactid>jetty-webapp</artifactid>
  <version>7.4.4.v20110707</version>
</dependency>
<dependency>
  <groupid>org.mortbay.jetty</groupid>
  <artifactid>jsp-2.1-glassfish</artifactid>
  <version>2.1.v20100127</version>
</dependency>

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

<dependency>
  <groupid>javax.servlet</groupid>
  <artifactid>servlet-api</artifactid>
  <version>2.5</version>
  <scope>compile</scope>
</dependency>

Мы могли бы предоставить Heroku сложную командную строку для запуска приложения. Вместо этого мы упростим командную строку, используя appassembler-maven-plugin для создания сценария запуска. Добавьте плагин в раздел сборки / плагинов вашего pom:

<plugin>
  <groupid>org.codehaus.mojo</groupid>
  <artifactid>appassembler-maven-plugin</artifactid>
  <version>1.1.1</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals><goal>assemble</goal></goals>
      <configuration>
        <assembledirectory>target</assembledirectory>
        <extrajvmarguments>-Xmx512m</extrajvmarguments>
        <programs>
          <program>
            <mainclass>Main</mainclass>
            <name>webapp</name>
          </program>
        </programs>
      </configuration>
    </execution>
  </executions>
</plugin>

Наконец, переключите упаковку с войны на банку. Вот и все для пом. Теперь, когда приложение готово к самостоятельному размещению, создайте простой Main для начальной загрузки Jetty и разместите сервлет. Приведенный выше фрагмент кода pom предполагает наличие файла src / main / java / Main.java, который выглядит следующим образом:

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class Main {
  public static void main(String[] args) throws Exception {
    String webappDirLocation = "src/main/webapp/";
    String webPort = System.getenv("PORT");
    if(webPort == null || webPort.isEmpty()) {
      webPort = "8080";
    }
    Server server = new Server(Integer.valueOf(webPort));
    WebAppContext root = new WebAppContext();
    root.setContextPath("/");
    root.setDescriptor(webappDirLocation+"/WEB-INF/web.xml");
    root.setResourceBase(webappDirLocation);
    root.setParentLoaderPriority(true);
    server.setHandler(root);
    server.start();
    server.join();
  }
}

Обратите внимание на использование переменной среды PORT для определения используемого порта. Heroku и Neo4j Add-on используют ряд переменных среды для настройки приложения.

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

Например, если у вас есть src / main / resources / META-INF / spring / applicationContext-graph.xml, измените его так, чтобы он выглядел следующим образом:

<neo4j:config graphdatabaseservice="graphDatabaseService">
  <bean class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase" id="graphDatabaseService">
    <constructor-arg index="0" value="${NEO4J_REST_URL}">
    <constructor-arg index="1" value="${NEO4J_LOGIN}">
    <constructor-arg index="2" value="${NEO4J_PASSWORD}">
</constructor-arg></constructor-arg></constructor-arg></bean>
</neo4j:config>

Перед подготовкой в ​​Heroku протестируйте приложение локально. Сначала убедитесь, что сервер Neo4j работает по адресу http: // localhost: 7474, используя конфигурацию по умолчанию. Затем установите следующие переменные окружения (здесь, предполагая bash):

export NEO4J_REST_URL=http://localhost:7474/db/data
export NEO4J_LOGIN=""
export NEO4J_PASSWORD=""

Теперь вы можете запустить приложение, запустив sh target / bin / webapp. Если все прошло хорошо, ваше приложение будет доступно, как если бы оно было в контейнере Tomcat.

Развернуть в Heroku

Когда готовое приложение готово, развертывание на Heroku требует еще нескольких шагов. Сначала создайте Procfile на верхнем уровне проекта, который будет содержать одну строку, идентифицирующую командную строку, которая запускает приложение. Содержимое Procfile должно содержать одну строку:

sh target / bin / webapp

Затем используйте git для магического развертывания в Heroku:

# Initialize a local git repository, adding all the project files
git init
git add .
git commit -m "initial commit"
# Provision a Heroku stack, add the Neo4j Add-on and deploy the appication
 
heroku create --stack cedar
heroku addons:add neo4j
git push heroku master

Обратите внимание, что стек heroku должен быть «кедровым» для поддержки запуска Java. Убедитесь, что процесс запущен с помощью heroku ps, который должен показывать процесс «web.1» в состоянии «вверх».

Успех! Ваше приложение теперь находится в облаке.

Чтобы увидеть график Neo4j, который вы только что создали с помощью Heroku, используйте конфигурацию heroku, чтобы открыть переменную среды NEO4J_URL, которая приведет вас к веб-администратору Neo4j
.

Резюме

Вся эта печать действительно сводится к трем шагам:

  1. сделайте ваше приложение самостоятельно
  2. получить доступ к переменным среды Heroku для настройки
  3. развернуть в облаке

Теперь обновите приложение и присоединяйтесь к нам в облаке. Здесь всегда солнечно.

Источник: 
http://blog.neo4j.org/2012/01/spring-onto-heroku.html