猜你不知道Spring Boot的几种部署方式(小结)
引言
本文主要讲的是springboot的五种部署方式,里面是否有你不知道的呢,如果有欢迎评论留言哦,一起交流探讨哦!!!
可以使用各种方法将SpringBoot应用程序部署到生产系统中。在本文中,我们将通过以下5种方法逐步部署SpringBoot应用程序:
- 在JavaArchive(JAR)中作为独立应用程序进行部署,
- 将Web应用程序存档(WAR)部署到servlet容器中,
- 在DockerContainer中部署,
- 在NGINXWeb服务器后面部署-直接设置,
- 部署在NGINXWeb服务器后面-容器化设置。
在JavaArchive(JAR)中作为独立应用程序进行部署
SpringBoot应用程序可以轻松打包到JAR文件中,并作为独立应用程序进行部署。这是由spring-boot-maven-plugin完成的。一旦Spring项目通过SpringInitializr创建为Maven项目,插件就会自动添加到pom.xml中。
org.springframework.boot spring-boot-maven-plugin
要将应用程序打包在单个(胖)jar文件中,请mvnpackage在项目目录下运行maven命令。这将把应用程序打包到一个可执行的jar文件中,该文件包含所有依赖项(包括嵌入式servlet容器-如果它是一个Web应用程序)。要运行jar文件,请使用以下标准JVM命令:
java-jar.jar
将Web应用程序存档(WAR)部署到servlet容器中
可以将SpringBoot应用程序打包到WAR文件中,以部署到现有的servlet容器(例如Tomcat,Jetty等)中。这可以按如下方式完成:
通过pom.xml文件指定WAR包
org.springframework.boot spring-boot-starter-tomcat provided
通过扩展SpringBootServletInitializer并覆盖configure方法来初始化Tomcat所需的Servlet上下文,如下所示:
@SpringBootApplication publicclassDemoAppextendsSpringBootServletInitializer{ @Override protectedSpringApplicationBuilderconfigure(SpringApplicationBuilderbuilder){ returnbuilder.sources(DemoApp.class); } publicstaticvoidmain(String[]args){ SpringApplication.run(DemoApp.class,args); } }
要将应用程序打包到war文件中,请mvncleanpackage在项目目录下运行标准maven命令。这将生成可以部署到servlet容器中的WAR包。要在现有Tomcat容器中运行应用程序,请将生成的WAR文件复制到tomcat/webapps/目录。
在DockerContainer中部署
在将应用程序部署到Docker容器之前,我们首先将应用程序打包在(胖)JAR文件中。之前已经解释了这个过程,因此我假设我们有一个jar文件。
在第一步,我们需要构建一个容器镜像。为此,我们首先在项目根目录中创建一个Dockerfile,如下所示:
#latestoracleopenjdkisthebasis FROMopenjdk:oracle #copyjarfileintocontainerimageunderappdirectory COPYtarget/demoApp.jarapp/demoApp.jar #exposeserverportacceptconnections EXPOSE8080 #startapplication CMD["java","-jar","app/demoApp.jar"]
请注意,在上面的代码片段中,我们假设应用程序JAR文件“demoApp.jar”位于项目的目标目录下。我们还假设嵌入式servlet端口是8080(这是Tomcat的默认情况)。
我们现在可以使用以下命令构建Docker镜像(Dockerfile所在的位置):
dockerimagebuild-tdemo-app:latest.
-t是要构建的镜像的名称和标记。构建镜像后,我们可以通过以下方式创建和运行容器:
dockercontainerrun-p8080:8080-d--nameapp-containerdemo-app
-p是发布(映射)主机端口到容器端口(在这种情况下,两个都是8080)。选项-d(detach)指定在后台运行容器,并用--name指定容器的名称。
部署在NGINXWeb服务器后面-直接设置
为实际生产配置servlet容器(例如Tomcat或Jetty)(即在端口80上运行,没有root用户和使用SSL)可能不是直接的(但可行)。此,建议在SpringBoot应用程序前使用Web服务器(如Nginx)。这可以通过两种方式完成;直接设置或Docker设置。在本节中,我们将演示直接设置。
在直接设置中,我们直接在localhost上运行NginxWeb服务器和SpringBoot应用程序(当然在不同的端口上)。我们让Ngnix代理REST请求到SpringBoot应用程序:
- 在Linux上安装NginxWeb服务器sudoapt-getinstallnginx,
- /etc/ngnix/sites-available/default使用文本编辑器打开文件,
- 比如说,我们有两个SpringBoot应用程序需要代理。然后用两个SpringBoot应用程序的以下块替换文件中的“location”块。请注意,可以在此处找到所有Nginx-Java配置。
location/app1{ proxy_passhttp://localhost:8080; } location/app2{ proxy_passhttp://localhost:9000; }
在此基础上对将来的请求http://localhost/app1/将被定向到/http://localhost:8080/,和将来的请求http://localhost/app2/将被引导到/http://localhost:9000/。
负载均衡
如果您正在运行SpringBoot应用程序的多个实例,则可以启用Nginx以应用负载平衡。例如,如果我们在端口8080,8081和8082上运行3个app1实例。我们可以在这些服务器之间进行负载平衡,如下所示:
打开文件/etc/ngnix/sites-available/default并在文件顶部添加以下块(在服务器块之前):
#configureload-balancing upstreambackend{ serverlocalhost:8080; serverlocalhost:8081; serverlocalhost:8082; }
修改app1的proxy_pass参数,如下所示:
location/app1{ proxy_passhttp://backend; }
基于此请求http://localhost/app1/将被发送到/http://localhost:8080/,/http://localhost:8081/或/http://localhost:8082/。
部署在NGINXWeb服务器后面-容器化设置
在容器化设置中,我们将NginxWeb服务器和所有SpringBoot应用程序部署在单独的Docker容器上。我们让Nginx(在自己的容器中运行)向SpringBoot应用程序容器代理REST请求。
我们首先将所有SpringBoot应用程序打包在(胖)jar文件中(之前已经解释过)。此时,请注意通过向application.properties(或application.yml)文件添加以下行来为每个SpringBoot应用程序设置单个服务器端口和根上下文路径:
server.port=8082 server.servlet.context-path=/search-service
然后我们将生成的jar包部署在单独的Docker容器中(之前也有解释)。
例如,我们部署了四个SpringBoot应用程序;“分析服务”应用程序的单个实例和“搜索服务”应用程序的三个实例。搜索服务应用程序的三个实例将由Nginx负载平衡。
我们基于默认配置创建Nginx配置文件nginx.conf。我们为每个服务添加负载平衡和代理信息,如下所示:
http{ upstreambackend{ serversearch-service-1:8080; serversearch-service-2:8081; serversearch-service-3:8082; } server{ listen80default_server; listen[::]:80default_server; root/var/www/html; server_name_; location/search-service{ proxy_passhttp://backend/search-service; } location/analysis-service{ proxy_passhttp://analysis-service:8083/analysis-service; } } } events{worker_connections1024;}
请求到http://localhost/search-service/将被引导到一个/http://search-service-1:8080/search-service/,/http://search-service-2:8081/search-service/和/http://search-service-3:8082/search-service/,和请求http://localhost/analysis-service/将被引导到/http://analysis-service:8083/analysis-service/。
创建配置文件(nginx.conf)后,我们将在Docker容器中部署NginxWeb服务器。为此,我们创建一个Dockerfile,如下所示:
#latestnginx FROMnginx #copycustomconfigurationfile COPYnginx.conf/etc/nginx/nginx.conf #exposeserverport EXPOSE80 #startserver CMD["nginx","-g","daemonoff;"]
我们为NginxWeb服务器构建一个Docker镜像,如下所示:
dockerimagebuild-tcustom-nginx:latest.
构建所有Docker镜像后,可以通过docker-composeup在以下docker-compose.yml文件上运行命令来部署所有系统:
version:'3.7' services: nginx_server: image:custom-nginx ports: -'80:80' networks: -demo-network depends_on: -"search-service-1" -"search-service-2" -"search-service-3" -"analysis-service" search-service-1: image:search-service-1 ports: -'8080:8080' networks: -demo-network search-service-2: image:search-service-2 ports: -'8081:8081' networks: -demo-network search-service-3: image:search-service-3 ports: -'8082:8082' networks: -demo-network analysis-service: image:analysis-service ports: -'8083:8083' networks: -demo-network networks: demo-network: name:demo-network
总结
我们演示了五种部署SpringBoot应用程序的方法。部署的选择基于整体解决方案体系结构,目标平台的要求,例如安全性和可用资源。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。