Перед использованием сборки для упаковки проектов Springboot MicroServices я хотел бы поговорить о нескольких общих методах развертывания для проектов Springboot в настоящее время.
Используйте контейнеры Docker для развертывания, построить приложение Springboot в изображение Docker, а затем запустите изображение через контейнер. Этот метод очень удобен, когда необходимы крупномасштабные приложения и расширения приложений. Это текущее решение для развертывания промышленного уровня, но оно требует освоения экосистемной технологии Docker.
Используйте Fatjar для развертывания и запуска напрямую, что является простым методом развертывания приложений для многих начинающих или очень мелких ситуаций.
Эта статья в основном предоставляет более дружественное решение для упаковки для второго метода развертывания, который должен облегчить управление развертыванием. Первый метод может быть написан в моем блоге в будущем.
1. Почему Springboot должен быть упакован в эксплуатацию?
Недавно я видел проектную команду. Они использовали Springboot для разработки проекта и построения взаимодействия с командой по эксплуатации и техническому обслуживанию, которая представляет собой пружинный загрузочный фабрик. Кроме того, этот оригинальный пакет, несомненно, очень фатальный для сотрудников эксплуатации и технического обслуживания в традиционных компаниях по разработке проектов. После того, как проект будет предоставлен, весь файл конфигурации скрыт в JAR, и изменение файла конфигурации для разных средт становится очень сложной вещью. Поэтому, когда мы вводим любую новую технологию в компании, мы должны рассмотреть, как быть ориентированным на услуги и инженерным. Если мы ссылаемся только на техническую структуру, нам может потребоваться только добавить несколько зависимостей, прочитать API и написать несколько строк кода для запуска.
Чтобы решить вышеупомянутые проблемы, мы должны быть ориентированы на обслуживание и ориентированы на инженерную инженерию, и нам нужно примерно решить две проблемы:
Включите Springboot загружать файлы конфигурации вне банки.
Предоставьте сценарий запуска на основе услуг, который обычно представляет собой оболочку или летучую мышь под окнами. Благодаря сценарию службы приложений Springboot вы можете запустить и остановить приложения Springboot.
2. Диаграмма структуры приложения упакованной пружины
Здесь мы сначала посмотрим на рендеринги после использования сборки для упаковки Springboot Service.
3. Важные шаги для упаковки обслуживания
Ниже приведены подробные шаги для упаковки Springboot.
3.1 Добавить плагин пакета сборки
<blicin> <ratifactid> maven-assembly-plugin </artifactid> <sersion> 3.0.0 </version> <figureturation> <conscriptors> <cescriptor> src/main/assbly/assembly.xml </descriptor> </descriptors> </configuration> <ferfience> <seecution> <duction> <duction> <duction> <duction> <duction> <duction> <der> <duction> <duction> <duction> <duction> <de ueption> <ID>. <ogle> single </ogle> </oal> </выполнение> </receforments> </placin>
Из приведенного выше кода я поместил конфигурацию сборки в основной каталог. Это привычка, и вы не можете поместить ее здесь. Вот общая структура схема сборки в проекте:
3.2 Сборка
Конфигурация сборки аналогична следующей конфигурации, которая представляет собой не что иное, как сценарии службы упаковки, банки, файлы конфигурации и т. Д. Из следующего кода вы обнаружите, что сборка набрала файл конфигурации в конфигурации.
<assembly> <id>1.0</id> <formats> <format>tar.gz</format> </formats> <fileSets> <fileSet> <fileSet> <directory>src/main/assembly/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> </fileSet> <fileSet> <ficeletory> src/main/assbly/config </directory> <suptureDirectory> config </outputDirectory> <fileMode> 0644 </fileMode> </fileSet> <FiedSet> <cirecateory> target </Directory> <sut outputDirectory> </outputDirectory> <clite> <clack>*. <Directory> src/main/resources </directory> <put outdirectory> logs </outputDirectory> <fileMode> 0755 </fileMode> <concludeS> <concellide> **/*</exclide> </exclides> </fileSet> </fileSets> </assbly>
3.3 Написание служб сценариев
Теперь напишите сценарии для среды Linux.
Первый: START.SH STARTUP SCRIPT
#!/bin/bashserver_name = 'Spring-vue'# jar name jar_name = 'springboot-vue.jar'cd `dirname $ 0`bin_dir =` pwd`cd ..deploy_dir = `pwd`conf_dir = $ deploy_dir/config #pert_port =` sed'sser. Config/Application.properties | tr -d '/r'`# Получить номер порта сервера приложений_порта = `sed -nr'/port: [0-9]+/s /.* port:+([0-9]+).*// 1/p 'config/application.yml`pids =` ps -f | Греп Java | grep "$ conf_dir" | awk '{print $ 2}' `if [" $ 1 "=" status "]; тогда если [-n "$ pids"]; Затем эхо "$ server_name работает ...!" echo "pid: $ pids" exit 0 else echo "$ server_name остановлен" Exit 0 fifiif [-n "$ pids"]; Затем эхо "ошибка: $ server_name уже началась!" echo "pid: $ pids" exit 1fiif [-n "$ server_port"]; Тогда server_port_count = `netstat -tln | grep $ server_port | wc -l` if [$ server_port_count -gt 0]; Затем Echo "ошибка: $ server_name port $ server_port уже используется!" Выйдите 1 fifilogs_dir = $ deploy_dir/logsif [! -d $ logs_dir]; Затем mkdir $ logs_dirfistdout_file = $ logs_dir/stdout.logjava_opts = "-djava.awt.headless = true -djava.net.preferipv4stack = true" java_debug_opts = "" if ["$ 1" = "debug"]; Затем java_debug_opts = "-xdebug -xnoagent -djava.compiler = none -xrunjdwp: transport = dt_socket, address = 8000, server = y, surpend = n" fijava_jmx_opts = "" if ["$ 1" = "jmx"]; Затем java_jmx_opts = "-dcom.sun.management.jmxremote.port = 1099 -dcom.sun.management.jmxremote.ssl = false -dcom.sun.management.jmxremote.authenticate = false" fijava_mem_opts = "" bits = `java -aversion 2 grep -i 64 -bit`if [-n "$ bits"]; Тогда Java_mem_opts = "-Server -xmx512m -xms512m -xmn256m -xx: permsize = 128m -xss256k -xx:+disableExplicitgc -xx:+useconcmarksweepgc -xx:+cmsparalleleLemAblemabled -xx -x -Xx: lagspagesizeinbytes = 128m -xx:+usefastaccessormethods -xx:+usecmsinitiatingoccupancyonly -xx: cmsinitiationoccupancyfraction = 70 "else java_mem_opts =" -server -xms512m -xmx512me_opts = ". -Xx: survivorratio = 2 -xx:+useparallgc "ficonfig_files =" -dlogging.path = $ logs_dir -dlogging.config = $ conf_dir/log4j2.xml -dspring.config.location = $ conf_dir/application.properties "echo -e -e -e -e -e -e -e -e sarthup. $ Java_opts $ java_mem_opts $ java_debug_opts $ java_jmx_opts $ config_files -jar $ deploy_dir/lib/$ jar_name> $ stdout_file 2> & 1 & count = 0while [$ count -lt 1]; do echo -e "./c" Sleep 1 if [-n "$ server_port"]; Тогда count = `netstat -an | grep $ server_port | wc -l` else count = `ps -f | Греп Java | grep "$ deploy_dir" | awk '{print $ 2}' | wc -l` fi if [$ count -gt 0]; Тогда сломайте Fidoneecho "OK!" PIDS = `ps -f | Греп Java | grep "$ deploy_dir" | awk '{print $ 2}' `echo" pid: $ pids "echo" stdout: $ stdout_file "Скрипт. $ 0`bin_dir = `pwd`cd ..deploy_dir =` pwd`conf_dir = $ deploy_dir/configserver_name = $ deploy_dirpids = `ps -ef | Греп Java | grep "$ conf_dir" | awk '{print $ 2}' `if [-z" $ pids "]; Затем эхо "ошибка: $ server_name не началась!" Выход 1fiif ["$ 1"! = "Skip"]; Тогда $ bin_dir/dilmb.shfiecho -e "Остановка $ server_name .../c" для pid в $ pids; сделать убить $ pid> /dev /null 2> & 1donecount = 0while [$ count -lt 1]; Do Echo -e "./c" Sleep 1 count = 1 для pid в $ pids; do pid_exist = `ps -f -p $ pid | grep java` if [-n "$ pid_exist"]; Тогда count = 0 Break fi Doneoneecho "ok!" Echo "Pid: $ PID"Скрипт запуска для среды Windows:
Echo Offset app_name = springboot -vue.jarset config = -dlogging.path = ../logs -dlogging.config = ../config/log4j2.xml -dspring.config.location = ../config/application.yml set debug_opts = if "%1" "==" -Xloggc: ../ logs/gc.log -verbose: gc -xx:+printgcdetails -xx:+heapdumponoutofmemoryerror -xx: heapdumppath = ../logs goto debug) set jmx_opts = if "%1" "==" "jmx" -Dcom.sun.management.jmxremote -dcom.sun.management.jmxremote.port = 9888 -dcom.sun.management.jmxremote.ssl = false -dcom.sun.manage -Xmx512m -server%debug_opts%Jmx_opts%config%-jar ../lib/%App_name%goto End: Debugecho "Debug" java -xms512m -xmx512m -server%debug_opts%config%../lib/%App_name%GOT -Xms512m -xmx512m -server%jmx_opts%config%-jar ../lib/%App_name%goto end: endpause
Для различных проектов Springboot вам нужно только соответствующим образом изменить сценарий. Чтобы сохранить пространство, я не буду перечислять другие сценарии здесь. Вы можете обратиться к демонстрации, которую я отправил: https://github.com/shalousun/springboot-vue.git
Примечание. Приведенный выше сценарий упоминается от Dubbo Official. Фактически, это также похоже на легкую конструкцию проектов Dubbo.
4. Обработка пути журнала после упаковки
На рисунке во втором разделе вы можете видеть, что пакетные журналы приложений, как правило, выводятся в каталог журналов. Однако для различных системных платформ, хотя настроенные пути вывода журнала одинаковы, они не обязательно могут быть выводом в журналы в конце. После тестирования нет проблем с использованием относительных путей журнала на платформе Windows ./ В журналах, но для использования относительных путей в системах Linux его нельзя вывести в журналы. Поэтому рекомендуется написать абсолютные пути на платформе Linux. Однако в сценарии, который я предоставил, установите путь на выходной журнал
-Dlogging.path = ../logs
Поэтому, объединяя мощную способность log4j2, вы можете установить путь журнала Log42:
<имя свойства = "log_home"> $ {sys: logging.path} </property>Тем не менее, журнал доступа для приложений Springboot, по -видимому, использует только абсолютные пути под Linux.
# Server ConfigServer: Port: 8080 Undertow: AccessLog: включен: true dir:/usr/xxx/logslogging: path:/usr/xxx/logs
Конечно, студенты, которые используют конфигурацию для решения проблемы позже, могут напомнить им, чтобы исправить их.
Суммировать:
Сам этот план не приносит ничего нового, и большинство сценариев ссылаются на официальные сценарии Даббо, но они сделали некоторые улучшения. Но важным моментом является то, как подумать о обслуживании и технике, необходимых для использования этой технологии на основе фактических сценариев технического применения.
Выше представлено решение для сервисной упаковки на основе сборки Springboot, представленное редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!