Многие пользователи сети будут спрашивать меня время от времени, как проверить проект Spring Boot, как его развернуть, и есть ли хорошие решения для развертывания в производстве? В этой статье будет представлена то, как разрабатывается Spring Boot, отладка, упакована и, наконец, вставлена в производство и запуск.
Стадия развития
ЕДИНЦИОННЫЕ Тестирование
Самым важным на стадии разработки является модульное тестирование. Поддержка Springboot для модульных испытаний была усовершенствована.
1. Добавить ссылку на пакет Spring-Boot-Starter-Test в пакет POM
<Depective> <groupId> org.springframework.boot </GroupId> <artifactid> spring-boot-starter-test </artifactid> <cerpope> test </scope> </depertive>
2. Разработка и тестирование
Принимая простейший Helloworld в качестве примера, вам нужно добавить: @runwith (springrunner.class) и @springboottest аннотации в главу класса тестового класса. Просто добавьте @Test в верхней части метода испытаний и, наконец, щелкните правой кнопкой мыши метод запуска.
@Runwith (springrunner.class) @springboottestpublic class applicationtests {@test public void hello () {System.out.println ("Hello World"); }}В фактическом использовании вы можете вводить код слоя DAO или код уровня обслуживания в соответствии с нормальным использованием проекта для тестирования и проверки. Spring-Boot-Starter-Test обеспечивает много основных использований, и что еще более редко, так это то, что он добавляет поддержку тестирования уровня контроллера.
// Продолжайте убедиться, является ли набор результатов правильным Assert.assertequals (3, usermapper.getall (). Size ()); // Проверьте набор результатов, rasfor assert.asserttrue («Ошибка, правильное возвращаемое значение составляет 200», состояние == 200); Assert.assertfalse ("Ошибка, правильное возвратное значение составляет 200", статус! = 200);MockMVC вводится для поддержки тестирования уровня контроллера. Простой пример заключается в следующем:
открытый класс hellocontrolertests {private mockmvc mvc; // Инициализировать выполнение @before public void setup () выбрасывает исключение {mvc = mockmvcbuilders.standalonesetup (new hellocontroller ()). Build (); } // Убедитесь, реагирует ли контроллер нормально и печатает результат возврата @Test public void gethello () бросает исключение {mvc.perform (mockmvcrequestbuilders.get ("/hello"). Принять (MediaType.application_json)) .anddo (mockmvcresulthandlers.print ()). andreturn (); } // Убедитесь, что контроллер отвечает нормально и определяет, является ли результат возврата правильным @test public void testhello () выбросит исключение {mvc.perform (mockmvcrequestbuilders.get ("/hello"). Принять (mediatype.application_json)) .andExpect(content().string(equalTo("Hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("Hello World")); }}Единое тестирование является первым барьером для проверки вашего кода. Вы должны разрабатывать привычку к единичным тестированию каждый раз, когда вы пишете часть своего кода. Не ждите, пока все они не будут интегрированы перед тестированием. После интеграции легко пропустить ошибки в нижней части кода, потому что вы уделяете больше внимания общему эффекту работы.
Интеграционное тестирование
После того, как общая разработка завершена, вводится интеграционный тест. Вход стартапа в Spring Boot Project находится в классе приложений. Вы можете запустить проект, запустив метод запуска напрямую. Однако в процессе отладки мы должны постоянно отлаживать код. Если вам нужно вручную перезагрузить сервис каждый раз, когда код будет изменен, это будет очень хлопотно. Spring Boot обеспечивает горячую поддержку развертывания очень полезно, что очень удобно для отладки и использования в веб -проектах.
POM должен добавить следующую конфигурацию:
<deperiandess> <dependency> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-devtools </artifactid> <putainate> true </optional> </depertive> </depertion> <buld> <blicins> <groupid> org.spramework.boot </groupid> <broad> <groupid> org.spramework. <Artifactid> Spring-boot-maven-plugin </artifactid> <figonturation> <fork> true </fork> </configuration> </placin> </plugins> </build>
После добавления вышеуказанной конфигурации проект поддерживает горячее развертывание, что очень удобно для тестирования интеграции.
Собираюсь производства и выходить в Интернет
На самом деле, я думаю, что этот этап должен быть относительно простым и в целом разделенным на два типа: один из них - упаковать его в пакет JAR и выполнить напрямую, а другой - упаковать его в военный пакет и поместить на сервер Tomcat.
Превратить это в пакет для банки
Если вы используете Maven для управления своим проектом, выполните следующую команду
Проект CD и каталог (тот же уровень, что и pom.xml) MVN Clean Package ## или выполнить следующую команду ##, чтобы исключить тестовый код и пакет MVN Clean Package -dmaven.test.skip = true
После завершения упаковки пакет JAR будет генерироваться в целевом каталоге. Имя обычно является названием проекта + версии №.
Запустите команду пакета JAR
Java -Jar Target/Spring-Boot-Scheduler-1.0.0.jar
Таким образом, до тех пор, пока консоль закрыта, услуга не будет доступна. Давайте начнем следующее с работы на заднем плане:
nohup java -jar target/spring-boot-scheduler-1.0.0.jar &
Вы также можете прочитать различные файлы конфигурации при запуске
java -jar app.jar -spring.profiles.active = dev
Вы также можете установить параметры JVM при запуске
java -xms10m -xmx80m -jar app.jar & gradle
Если вы используете Gradle, используйте следующую команду для пакета
Gradle Buildjava -Jar Build/Libs/MyModule-0.0.1-Snapshot.jar
Превратить в военную сумку
Первый тип может использоваться для экспорта военного пакета через Eclipse инструмента разработки, а другой тип - использовать команды для его завершения. Здесь мы в основном представляем последний.
1. Maven Project, измените пакет POM
Воля
<упаковка> jar </упаковка>
Изменить на
<упаковка> война </упаковка>
2. Исключите Tomcat при упаковке.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope></dependency>
Здесь установите свойство Scope на предоставление, чтобы пакет JAR не был включен в окончательную войну, потому что такие серверы, как Tomcat или Jetty, будут предоставлять соответствующие классы API во время выполнения.
3. Зарегистрируйте класс стартапов
Создайте Servletinitializer.java, наследует Springbootservletinitializer, переопределить configure () и зарегистрировать приложение класса запуска. Когда внешний сервер веб -приложений создает контекст веб -приложения, будет добавлен класс запуска.
Public Class ServletInitializer Extends SpringBootServletinitializer {@Override Protected SpringApplicationBuilder configure (SpressApplicationBuilder Application) {return Application.sources (Application.class); }}Окончательное исполнение
MVN Clean Package -dmaven.test.skip = true
Имя проекта + версию №. Файл WAR будет сгенерирован в целевом каталоге и скопирует его на сервер Tomcat для запуска.
Градл
Если вы используете Gradle, базовый шаг одинаково. Добавить военную поддержку в Build.Gradle и исключить Spring-Boot-Starter-Tomcat:
... Примените плагин: 'War' ... Deperiancess {compile ("org.springframework.boot: Spring-Boot-Starter-Web: 1.4.2.Release") {Exclude MyModule: "Spring-Boot-Starter-Tomcat"}} ...Снова используйте команду сборки
Градл сборка
Война будет сгенерирована в каталоге Build/Libs.
Производственная эксплуатация и техническое обслуживание
Просмотреть значение параметров JVM
Вы можете следовать команде Jinfo, которая поставляется с Java:
jinfo -flags pid
Давайте посмотрим, что GC используется после начала банки, сколько памяти в партиях нового поколения и пожилых людей. Примеры следующие:
-Xx: cicompilercount = 3 -xx: initialHeapsize = 234881024 -xx: maxheapsize = 3743416320 -xx: maxnewsize = 1247805440 -xx: minheapdeltabytes = 524288 -xx: newsize = 7818912 -xx. -Xx:+usecompressedclasspointers -xx:+usecompressedoop -xx:+use fastundordordertimestamps -xx:+useparallgc -xx: cicompilercount: максимальная параллельная компиляции -xx: initialHeapSize и -xx: maxHeapize: Укажите первоначальный и максимальный heAp size of -size -xx -x. Максимальный распределимый размер для нового поколения памяти в области кучи JVM ... -xx:+Useparallgc: Сбор мусора использует параллельный коллекционер
Как перезапустить
Простая и грубая
Прямо убейте процесс и снова запустите пакет JAR
PS -EF | GREP Java ## Получите Pidkill для Java Program -9 PID ## снова перезапустить Java -JAR XXXX.JAR
Конечно, этот метод более традиционный и жестокий, поэтому рекомендуется использовать следующий метод для управления им
Выполнение скрипта
Если вы используете Maven, вам необходимо включить следующую конфигурацию
<blicin> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-maven-plugin </artifactid> <figontureture> <serviefable> true </rececuate> </configuration> </placin>
Если вы используете Gradle, вам необходимо включить следующую конфигурацию
Springboot {execute = true}Метод запуска:
1. Вы можете начать прямо в ./yourapp.jar
2. Зарегистрируйтесь в качестве услуги
Вы также можете сделать мягкую ссылку, чтобы указать на свой пакет JAR и добавить ее в init.d, а затем запустить ее с команд.
init.d Пример:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapp
Таким образом, вы можете использовать команду «Стоп» или «Перезапуск» для управления вашим приложением.
/etc/init.d/yourapp Start | Stop | перезапуск
или
Служил свой старт | Стоп | Перезагрузить
На этом этапе была введена тест, совместная координация и упаковка проектов Springboot. Вы можете найти время для изучения автоматической работы и обслуживания Springboot и комбинации Springboot и Docker.
Пример кода - GitHub
Образец кодового облака кода
Суммировать
Выше приведено метод пружинной загрузки и развертывания, представленного вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!