Рубрики
Без рубрики

Запустите интерфейс React и серверную часть Spring Boot на одном порту и упакуйте их как единый артефакт!!

Узнайте, как объединить create-react-app с Spring Boot, чтобы получить единый артефакт. H… Помечен тегами react, springboot, java, maven.

Узнайте, как объединить create-react-app с Spring Boot, чтобы получить единый артефакт.

Эй, там! Я разработчик полного стека с более чем 3-летним опытом работы, базирующийся в Западной Бенгалии, Индия. Сегодня я расскажу вам о хитрости настройки, чтобы подготовить структуру вашего проекта для запуска приложений react и spring boot на одном порту и упаковать их как единый артефакт. Вы увидите, насколько это может упростить разработку, когда вы имеете дело с обеими этими технологиями, меняющими правила игры.

Вот ссылка на демонстрационную версию GitHub, которую я собираюсь здесь объяснить.

  1. Сочетает в себе простоту разработки как create-react-app , так и Spring Boot.

  2. Вы можете использовать функцию горячей перезагрузки create-react-app при разработке интерфейса, сохранить страницу после внесения изменений, и она сразу же отразится в браузере.

  3. С помощью Spring Boot вы можете легко управлять версиями для разработки (используя моментальные снимки) и выпускать версии в рабочей среде. Вы можете определить версию и время сборки во время выполнения в Spring Boot с помощью Spring Actuator или Spring Admin, которые могут обеспечить функциональность метаданных сборки и многое другое.

  4. Упакуйте интерфейс и серверную часть в один файл war/jar с оптимизированной производственной сборкой.

Я узнал об этом в одном из моих недавних проектов. В нем есть несколько микросервисов spring boot с интерфейсом react, упакованных и развернутых как отдельные собственные артефакты.

Итак, вот краткое руководство по запуску интерфейса react и серверной части spring boot на одном порту и как упаковать их в один jar-файл.

Во-первых, создайте проект spring boot с помощью https://start.spring.io . Добавьте веб-зависимость. Установите groupId и artifactId на все, что вы хотите. Создайте проект и распакуйте его в свой каталог проекта.

Или, если вы используете Spring Tools Suite, вы можете просто нажать File->New->Spring Starter Project и укажите необходимые детали для создания проекта spring boot.

Ваш первоначальный pom.xml должно выглядеть примерно так.

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

Вы можете запустить приложение прямо сейчас и посмотреть, работает ли оно без каких-либо ошибок. Хотя вы ничего не увидите, если нажмете http://localhost:8080/ .

Теперь перейдите в src/main/resources , создайте папку static . Внутри него создайте test.html файл с некоторым текстом в нем.

Теперь, если вы перезапустите приложение и нажмете http://localhost:8080/test.html вы увидите, что он запускает вашу html-страницу в порт 8080 . Вы можете просмотреть содержимое вашего файла в браузере.

Обслуживание приложения React из Spring Boot на порту 8080 и их объединение

Мы будем использовать вышеупомянутую функцию Spring Boot для обслуживания одной страницы проекта react. Мы будем обслуживать html-страницу из папки static в каталоге target , а не в исходном каталоге.

Теперь давайте создадим приложение react, используя create-react-app . Перейдите в свою папку util src/main в терминале D:\Codes_projects\springboot_react_maven_plugin\Spring_React_maven-plugin\src\main > и запустите интерфейс npx create-react-app .

Это должно создать приложение react внутри src/main . Теперь, если вы посмотрите на свою структуру папок, она должна выглядеть следующим образом.

Вы можете запустить приложение react, выполнив команду cd frontend а затем запуск пряжи или/| запуск npm . Он должен запустить приложение react на http://localhost:3000 .

Вы можете создать производственную сборку интерфейса, выполнив yarn build . Ваша структура папок после выполнения команды сборки будет выглядеть следующим образом.

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

Итак, есть два шага-

  1. создайте производственную сборку интерфейса
  2. скопируйте производственную сборку в ${target/classes/}

Конечно, вы не собираетесь делать это вручную. Для этого мы будем использовать два плагина maven .

  1. интерфейс-maven-plugin для шага 1.
  2. maven-resources-plugin для шага 2.

Добавьте следующее в свой pom.xml в разделе плагины и обновите раздел свойства , как показано на рисунке.

   
        1.8
        ${project.basedir}/src/main/frontend
        v14.15.4
        v1.16.0
        1.7.6
    
           
                com.github.eirslett
                frontend-maven-plugin
                ${frontend-maven-plugin.version}

                
                    ${node.version}
                    ${yarn.version}
                    ${frontend-src-dir}
                    ${project.build.directory}
                

                
                    
                        install-frontend-tools
                        
                            install-node-and-yarn
                        
                    

                    
                        yarn-install
                        
                            yarn
                        
                        
                            install
                        
                    

                    
                        build-frontend
                        
                            yarn
                        
                        prepare-package
                        
                            build
                        
                    
                
               

Теперь, если вы запустите mvn clean install из D:\Codes_projects\springboot_react_maven_plugin\Spring_React_maven-plugin > maven установит npm, yarn и node локально и запустит сборку npm в каталоге интерфейса.

Структура папок будет выглядеть следующим образом-

Теперь добавьте второй плагин в свой pom.xml .

          
                maven-resources-plugin
                
                    
                        position-react-build
                        
                            copy-resources
                        
                        prepare-package
                        
                            ${project.build.outputDirectory}/static
                            
                                
                                    ${frontend-src-dir}/build
                                    false
                                
                            
                        
                    
                
            

Добавьте следующую зависимость в раздел зависимостей.

       
            org.projectlombok
            lombok
            true
        

Измените spring-boot-maven-plugin , чтобы включить раздел конфигурации.

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

Это гарантирует, что файлы сборки внешнего интерфейса будут скопированы после того, как они были сгенерированы с помощью yarn build . Теперь снова запустите mvn clean install и проверьте target/classes/static каталог из вашего файлового менеджера.

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

Ваш окончательный pom.xml будет выглядеть следующим образом.



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.2
         
    
    com.springreact
    demo
    0.0.1-SNAPSHOT
    demo
    Run React Frontend and SpringBoot Backend on the same port.
    
        1.8
        ${project.basedir}/src/main/frontend
        v14.15.4
        v1.16.0
        1.7.6
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot 
            spring-boot-starter-thymeleaf
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
            
                com.github.eirslett
                frontend-maven-plugin
                ${frontend-maven-plugin.version}

                
                    ${node.version}
                    ${yarn.version}
                    ${frontend-src-dir}
                    ${project.build.directory}
                

                
                    
                        install-frontend-tools
                        
                            install-node-and-yarn
                        
                    

                    
                        yarn-install
                        
                            yarn
                        
                        
                            install
                        
                    

                    
                        build-frontend
                        
                            yarn
                        
                        prepare-package
                        
                            build
                        
                    
                
            
            
                maven-resources-plugin
                
                    
                        position-react-build
                        
                            copy-resources
                        
                        prepare-package
                        
                            ${project.build.outputDirectory}/static
                            
                                
                                    ${frontend-src-dir}/build
                                    false
                                
                            
                        
                    
                
            
        
    

Теперь вы готовы к работе! Запустите проект и перейдите в http://localhost:8080/index.html ВУАЛЯ!! Вы запустили свое приложение React с помощью Spring Boot.

Вы запустили свое приложение React с помощью Spring Boot.

Вы можете добавить контроллеры rest и предоставить конечную точку в качестве начальной точки приложения. Подобно Index Controller , всякий раз, когда приложение загружается, spring boot запускает index.html файл со статическим содержимым из оптимизированной сборки интерфейсного проекта из целевого каталога . Так что вы можете просто посетить http://localhost:8080 и не жестко кодировать index.html имя файла.

Давайте сделаем это. Добавьте контроллер в следующую структуру папок.

package com.springreact.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class IndexController {

    @GetMapping("")
    public ModelAndView home() {
        ModelAndView mav=new ModelAndView("index");
        return mav;
    }

}

Запустите свое приложение и нажмите http://localhost:8080/ . Ты что-нибудь видел? Нет, правильно!

Вы должны добавить другую зависимость, чтобы это сработало.

        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

Теперь по умолчанию thymeleaf ищет наши шаблоны в src/main/resources/templates . Мы можем поместить туда наши шаблоны и упорядочить их по подкаталогам, и у нас не возникнет никаких проблем.

Итак, давайте попробуем это сделать. Добавьте html-файл в src/main/resources/templates с именем index.html и поместите в него какой-нибудь контент.

Запустите приложение и перейдите на страницу http://localhost:8080 . Вы увидите index.html из src/main/ресурсы/шаблоны обслуживается в порт 8080 .

Теперь, чтобы изменить это поведение по умолчанию и заставить thymeleaf обслуживать статический контент из другого местоположения, вам нужно добавить запись в файл application.properties .

spring.thymeleaf.prefix=file:///D:///Codes_projects//springboot_react_maven_plugin//Spring_React_maven-plugin//target//classes//static/

Здесь я жестко задал путь.

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

Вывод

Вы узнали, как использовать spring boot для запуска приложения react. Вы можете запускать как свой интерфейс, так и серверную часть на одном и том же порту. Я объяснил, что вам нужно сделать, чтобы выполнить настройку. Теперь вы можете создать значимое приложение и посмотреть, насколько легко и быстро его разрабатывать с помощью этой настройки. Теперь вы можете запускать интерфейсное приложение с помощью React-скриптов, запустив cd frontend ; yarn start , и разрабатывать с использованием функции горячей перезагрузки create-react-app и получать значимые сообщения об ошибках, имея возможность развернуть приложение для тестирования и производственные среды как единое

Спасибо за чтение!

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

Оригинал: “https://dev.to/arpan_banerjee7/run-react-frontend-and-springboot-backend-on-the-same-port-and-package-them-as-a-single-artifact-14pa”