部署Spring Boot Angular App(Maven和Tomcat)的4种方法

在上一篇有关Spring Boot angular 5的文章中 ,我们使用Spring Boot angular 5实现了一个完整的堆栈端到端Web应用程序。在本文中,我们将讨论在tomcat上部署Spring Boot和Angle App的不同方法。 我们将创建一个具有后端(服务器)和前端(客户端)的多模块maven项目,并探讨4种方法,以使用maven-war-plugin,maven-resources-plugin,jar包装等方式进行部署。

Spring Boot Angular 5项目

首先,让我简要介绍一下我们在上一个示例中构建的内容。 我们使用angular CLI生成了angular 5项目,并将其修改为具有列表用户和添加用户等功能。 我们使用Spring Boot公开了REST API以进行Crud操作,并使用集成的spring数据与MySql数据库进行通信。 我们利用ng serv服务localhost:4200上的angular项目,它消耗了localhost:8080上公开的API。 以下是最终的项目结构。

部署Spring Boot Angular应用程序的不同方法

部署spring boot和angular应用程序的最佳实践是将用户界面代码与业务逻辑分开,这使客户端代码与服务器代码脱钩,因此应用程序变得高度可伸缩且易于管理。 前端开发人员可以与前端开发人员并行进行前端开发。 后端代码可以免费使用和集成不同的技术堆栈,并且可以供多个客户端使用,例如可以将相同的API重新用于构建android应用程序,也可以将其与第三方客户端集成在一起,这也减少了停机时间你的申请。 每当您的API不可用或关闭时,您的客户端应用程序仍会打开。

但是有时候,为一个小型团队和一个小型应用程序管理两台服务器将成为一项开销。 如果单个全栈开发人员正在处理所有与UI和服务器相关的配置,则将前端和后端应用程序打包到单个Web应用程序中有时会更有帮助。 尽管如此,您仍可以公开REST API,并在同一个应用程序中集成有角度的代码,然后部署到tomcat,其他移动客户端可以重用相同的API。

现在,当要部署Java Web应用程序时,我们有两种不同的方法可以做到这一点。 在引入Spring Boot之后,您可以将应用程序打包为带有嵌入式tomcat和数据库的FAT jar文件,并作为可执行文件运行。 另外,您可以使用多个maven插件来创建.war文件并将其部署到独立的tomcat。

在本文中,我们将主要研究4种部署spring boot angular应用程序的方法,它们是-使用节点服务器和tomcat,使用maven war插件,使用maven资源插件和spring boot jar打包。

Spring Boot Angular多模块项目

我们已经有两个现有项目– userPortal(服务器)和portalApp(客户端),现在我们将其转换为多模块项目。 为此,创建一个新文件夹– portal-parent,将现有项目都移动到该文件夹​​中,并在portal-parent目录中创建pom.xml文件。 此pom.xml将模块定义为两个现有子项目– userPortal和portalApp,打包类型将为pom。 因此,无论何时构建此父级,都会首先构建子模块。

<modelVersion>4.0.0</modelVersion><groupId>com.devglan</groupId><artifactId>portal-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>portal parent</name><description>portal parnt</description><modules><module>user-portal</module><module>portal-app</module></modules>

使用Maven War插件进行部署

Maven War插件通过收集Web应用程序的所有工件依赖项,类和资源来创建.war文件。 因此,在此配置中,我们将配置客户端项目以将所有静态资源推送到目标/客户端,稍后在创建war文件时,我们将使用maven war插件将其包含在.war生成中并将其放置在/ static文件夹中。 当然,Spring Boot具有一项功能,可以在静态文件夹中查找静态资源,并且可以使用我们的静态静态资源。

因此,现在我们将如何获得静态资源的最终构建。 好吧,这将由angular本身完成。如果您查看angular-cli.json,您将发现一个JSOn属性为–“ outDir”:“ dist” ,。 这意味着如果我们构建角度项目,最终输出将被推送到dist文件夹。 现在,我们将在客户端pom.xml文件中进行配置,以使用npm构建角度项目。 为此,我们必须在客户端pom.xml中进行如下更改:

此配置将按照pom文件中的配置下载并安装节点和npm,npm install将安装package.json中列为依赖项的所有模块,并且在执行阶段,根据软件包中的配置,最终源将被推送到dist文件夹中.json。

另外,我们将在服务器的pom文件中进行配置,在配置war文件时,我们将配置maven war插件以包含../client/target的资源,并且将角度客户端作为jar依赖项。 这样,将产生最终的战争,现在您可以将其部署到任何独立的tomcat。

客户端pom.xml

<build><finalName>client</finalName><plugins><plugin><groupId>com.github.eirslett</groupId><artifactId>frontend-maven-plugin</artifactId><version>1.6</version><configuration>nodeVersion>v8.9.0</nodeVersion><npmVersion>5.5.1</npmVersion></configuration><executions><execution><id>install node and npm</id><goals><goal>install-node-and-npm</goal></goals></execution><execution><id>npm install</id><goals><goal>npm</goal></goals></execution><execution><id>npm run build</id><goals><goal>npm</goal></goals><configuration><arguments>run build</arguments></configuration></execution></executions></plugin></plugins><resources><resource><directory>target/client</directory><targetPath>static</targetPath></resource></resources></build>

服务器pom.xml

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.0</version><configuration><webResources><resource><directory>../user-portal/target</directory></resource></webResources></configuration></plugin></plugins></build>

完成这些更改后,请运行mvn clean install并生成您的战争。

使用Maven资源插件进行部署

我们已经配置了客户端,以在上述配置中将所有静态源推送到dist文件夹。 现在,我们将使用maven资源插件将dist文件夹中的所有文件复制到服务器项目的/ src / main / resources / static文件夹中,并且spring boot将从/ static文件夹中存储这些资源。 以下是pom配置。

<plugin><artifactId>maven-resources-plugin</artifactId><executions><execution><id>copy-resources</id><phase>validate</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>${build.directory}/classes/static/</outputDirectory ><resources><resource><directory>../portal-app/dist</directory></resource></resources></configuration></execution></executions>
</plugin>

使用Spring Boot Jar包装进行部署

在这种情况下,我们会将有角项目包装为罐子。 因此,客户端pom文件中不需要进行任何更改。此外,我们不需要在服务器pom文件中配置任何maven插件。 删除除了spring-boot-maven-plugin之外的所有构建配置。 不要忘记在服务器pm文件中添加客户端项目jar依赖项。 因此,现在,当我们构建项目时,jar将包含在META-INF / resources目录中,并且Spring Boot已预先配置为从该资源文件夹中提供静态内容。 您需要更改的一件事是package.json的build参数。

"build": "ng build -prod –output-path dist/META-INF/resources"

节点和Tomcat服务器部署

在这种情况下,角度项目可以托管在节点服务器上,而Spring Boot应用程序可以托管在任何其他应用程序服务器上。 为此,请运行ng build命令生成dist文件夹,然后将此文件夹复制到后端节点服务器。 这样做可以帮助分别平衡两个服务器的负载。

翻译自: https://www.javacodegeeks.com/2018/03/4-ways-to-deploy-spring-boot-angular-app-maven-tomcat.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机二级web题目(8.3)--简单应用题2

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1.在考生文件夹下的Web3目录中&#xff0c;存有3.htm文件&#xff0c;该文件不完…

计算机二级web题目(8.4)--综合应用题2

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1.在考生文件夹下的Web5目录中&#xff0c;存有5.htm文件&#xff0c;该文件不完…

(3.5)HarmonyOS鸿蒙上下左右方向滑动

需要获取按下时候的坐标和松开时候的坐标&#xff0c;并将两者进行比较。 ①MainAbilitySlice.java文件 可以根据使用情况做修改代码中判断处的限制偏差范围。 package com.example.yeman.slice;import com.example.yeman.ResourceTable; import ohos.aafwk.ability.Ability…

sql 注射_基本注射/资格赛,范围

sql 注射这是上周解决的DI / CDI基础知识的延续-在本文中&#xff0c;我将讨论基础注入&#xff0c;限定词和范围。 在上一个主题中&#xff0c;我们提供了有关DI / CDI概念的大量信息&#xff0c;我们还讨论了如何使用注释加载这些bean或类-这构成了对象的组成并创建了关于如…

计算机二级web题目(9.1)--综合选择题3

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1下列叙述中正确的是(D)。 A、栈是"先进先出"的线性表 B、队列是"…

java小程序 2048_微信小程序之游戏2048

主要用来锻炼逻辑思维能力image.png可以选模式image.png这里面主要解决的问题是&#xff1a;1.判断滑动方向//在滑动块级绑定滑动开始和滑动结束的方法很原始的方法&#xff0c;startFn时保存开始的(x,y),endFn时保存结束的(x1,y2),根据这四个参数 判断方向&#xff0c;算法在方…

Java面向对象(8)--继承性

多个类中存在相同属性和行为时&#xff0c;可以将这些内容抽取到单独一个类中&#xff0c;那么多个类无需再定义这些相同的属性和行为&#xff0c;只要继承那个类即可。 这里的多个类称为子类(派生类)&#xff0c;单独的这个类称为父类(基类或超类)。 语法格式&#xff1a;cla…

aimesh node重启_华硕 RT-AC86U 和 网件 R7000 组 AiMesh 成功

家里之前买了一个 R7000 主路由器&#xff0c;后来我嫌我房间里的信号有点烂( 5G 信号只能 2 格&#xff0c;网速比 2.4G 还慢)&#xff0c;所以就入手了一个华硕 RT-AC86U 作为主路由器&#xff0c;R7000 则作为 AP。在买的时候就想组 AiMesh&#xff0c;但是因为种种事情耽搁…

maven ant_如何在Maven中运行Ant目标?

maven antmaven-antrun-plugin允许我们在各种maven构建阶段中运行ant目标。 我将专门为具有开发环境的开发人员解释maven-antrun-plugin的非常实际的用法。 通常&#xff0c;使用maven build&#xff0c;您会将项目捆绑到war文件或ear文件中。 您可以使用maven-antrun-plugin…

java中打开文件显示_在默认文件资源管理器中打开文件,并使用JavaFX或普通Java突出显示它...

我想做标题所说的.部分解决方案例如,在Windows中,您可以使用以下代码在默认资源管理器中打开文件并突出显示它.(虽然它需要修改包含空格的文件)&#xff1a;/*** Opens the file with the System default file explorer.** param path the path*/public static void openFileLo…

win10下vscode配置c语言环境

1、C编译器下载 C编译器&#xff08;MinGW-W64 GCC&#xff09;的下载&#xff1a;点击官方下载 或者点击网盘下载提取码为karj 下载完成后解压&#xff0c;将解压后的文件夹放到合适的位置&#xff0c;点开其bin子文件夹&#xff0c;复制路径。 2、win10下环境变量配置 ①…

Java面向对象(11)--多态性

父类 变量名 new 子类&#xff08;&#xff09;&#xff1b;对象的多态性&#xff1a;父类的引用指向子类的对象 Java引用变量有两个类型&#xff1a;编译时类型和运行时类型。编译时类型由声明 该变量时使用的类型决定&#xff0c;运行时类型由实际赋给该变量的对象决定。简…

Java面向对象(12)--对象类型转换 (Casting )

基本数据类型的Casting&#xff1a; ①自动类型转换&#xff1a;小的数据类型可以自动转换成大的数据类型 如long g20; double d12.0f ②强制类型转换&#xff1a;可以把大的数据类型强制转换(casting)成小的数据类型 如 float f(float)12.0; int a(int)1200L Java对象的强制…

知识蒸馏 循环蒸馏_Java垃圾收集蒸馏

知识蒸馏 循环蒸馏串行&#xff0c;并行&#xff0c;并发&#xff0c;CMS&#xff0c;G1&#xff0c;Young Gen&#xff0c;New Gen&#xff0c;Old Gen&#xff0c;Perm Gen&#xff0c;Eden&#xff0c;Tenured&#xff0c;Survivor Spaces&#xff0c;Safepoints和数百个JVM…

Javascript中的AES加密和Java中的解密

AES代表高级加密系统&#xff0c;它是一种对称加密算法&#xff0c;很多时候我们需要在客户端加密一些纯文本&#xff08;例如密码&#xff09;并将其发送到服务器&#xff0c;然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台&#xff08;例如Android客户…

Java面向对象(14)--包装类的使用

针对八种基本数据类型定义相应的引用类型—包装类&#xff08;封装类&#xff09;&#xff0c;有了类的特点&#xff0c;就可以调用类中的方法。 基本数据类型 <——> 包装类&#xff0c;String——>包装类 ①装 int num 9; Integer int1 new Integer(num); Syste…

资源泄漏如何处理_处理缓慢的资源泄漏

资源泄漏如何处理使用Java监视器查找资源泄漏 查找缓慢的资源泄漏是使应用程序服务器长时间保持正常运行的关键。 在这里&#xff0c;我解释了如何使用Java监视器来发现缓慢的资源泄漏&#xff0c;以及如何验证它们是否是实际泄漏&#xff0c;而不仅仅是额外的预分配到某些HTTP…

mac php 超时,PHP---Mac上开启php错误提示

发现在使用mac 上 PHP开发项目的时候&#xff0c;程序代码错误的时候没有错误提示&#xff0c;只是提示白板。研究和查找资料才调整了一下; 步骤如下&#xff1a;1.找到php.ini文件如图所示&#xff1a;1)找到 display_errors Off &#xff0c;把Off 改为 On . 最后为 display…

tomcat 轮询_用Spring长轮询Tomcat

tomcat 轮询就像喜剧演员弗兰基 豪威尔 &#xff08; Frankie Howerd&#xff09;所说的“噢&#xff0c;小姐小姐” &#xff0c;但足够多的英国影射和双重诱惑&#xff0c;因为长轮询Tomcat对隔壁的闷气不是某种性的偏见&#xff0c;这是一种技术&#xff08;或更像是一种hac…

免费网络研讨会:Java应用程序中的吞咽异常

1月30日参加我们的网络研讨会&#xff0c;以发现Java应用程序中的“隐藏”异常。 如果一棵树落在森林中&#xff0c;但是没有写到原木上&#xff0c;它会发出声音吗&#xff1f; 答案是肯定的。 这些类型的错误可能会对用户体验造成严重影响&#xff0c;而没有根本原因的可见性…