自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

猜你不知道Spring Boot的幾種部署方式

新聞
本文主要講的是spring boot的五種部署方式,里面是否有你不知道的呢,如果有歡迎評論留言哦,一起交流探討哦!??!

 引言

本文主要講的是spring boot的五種部署方式,里面是否有你不知道的呢,如果有歡迎評論留言哦,一起交流探討哦?。?!

可以使用各種方法將Spring Boot應用程序部署到生產(chǎn)系統(tǒng)中。在本文中,我們將通過以下5種方法逐步部署Spring Boot應用程序:

  1. 在Java Archive(JAR)中作為獨立應用程序進行部署,
  2. 將Web應用程序存檔(WAR)部署到servlet容器中,
  3. 在Docker Container中部署,
  4. 在NGINX Web服務器后面部署 - 直接設置,
  5. 部署在NGINX Web服務器后面 - 容器化設置。

在Java Archive(JAR)中作為獨立應用程序進行部署

Spring Boot應用程序可以輕松打包到JAR文件中,并作為獨立應用程序進行部署。這是由spring-boot-maven-plugin完成的。一旦Spring項目通過Spring Initializr創(chuàng)建為Maven項目,插件就會自動添加到pom.xml中。

  1. <build>  
  2.  <plugins>  
  3.  <plugin>  
  4.  <groupId> org.springframework.boot </ groupId>  
  5.  <artifactId> spring-boot-maven-plugin </ artifactId>  
  6.  </ plugin>  
  7.  </ plugins>  
  8. </ build> 

要將應用程序打包在單個(胖)jar文件中,請mvn package在項目目錄下運行maven命令。這將把應用程序打包到一個可執(zhí)行的jar文件中,該文件包含所有依賴項(包括嵌入式servlet容器 - 如果它是一個Web應用程序)。要運行jar文件,請使用以下標準JVM命令:

  1. java -jar <jar-file-name>.jar 

將Web應用程序存檔(WAR)部署到servlet容器中

可以將Spring Boot應用程序打包到WAR文件中,以部署到現(xiàn)有的servlet容器(例如Tomcat,Jetty等)中。這可以按如下方式完成:

通過pom.xml文件指定WAR包<packaging>war</packaging>。這會將應用程序打包成WAR文件(而不是JAR)。在第二步,將Tomcat(servlet容器)依賴關系的范圍設置為provided(以便它不會部署到WAR文件中):

  1. <dependency> 
  2.  <groupId>org.springframework.boot</groupId> 
  3.  <artifactId>spring-boot-starter-tomcat</artifactId 
  4.  <scope>provided</scope> 
  5. </dependency> 

通過擴展SpringBootServletInitializer并覆蓋configure方法來初始化Tomcat所需的Servlet上下文,如下所示:

  1. @SpringBootApplication 
  2. public class DemoApp extends SpringBootServletInitializer { 
  3.  @Override 
  4.  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
  5.  return builder.sources(DemoApp.class); 
  6.  } 
  7.  public static void main(String[] args) { 
  8.  SpringApplication.run(DemoApp.class, args); 
  9.  } 

要將應用程序打包到war文件中,請mvn clean package在項目目錄下運行標準maven命令。這將生成可以部署到servlet容器中的WAR包。要在現(xiàn)有Tomcat容器中運行應用程序,請將生成的WAR文件復制到tomcat/webapps/目錄。

在Docker Container中部署

在將應用程序部署到Docker容器之前,我們首先將應用程序打包在(胖)JAR文件中。之前已經(jīng)解釋了這個過程,因此我假設我們有一個jar文件。

在第一步,我們需要構(gòu)建一個容器鏡像。為此,我們首先在項目根目錄中創(chuàng)建一個Dockerfile,如下所示:

  1. # latest oracle openjdk is the basis 
  2. FROM openjdk:oracle 
  3. # copy jar file into container image under app directory 
  4. COPY target/demoApp.jar app/demoApp.jar 
  5. # expose server port accept connections 
  6. EXPOSE 8080 
  7. # start application 
  8. CMD ["java""-jar""app/demoApp.jar"

請注意,在上面的代碼片段中,我們假設應用程序JAR文件“ demoApp.jar”位于項目的目標目錄下。我們還假設嵌入式servlet端口是8080(這是Tomcat的默認情況)。

我們現(xiàn)在可以使用以下命令構(gòu)建Docker鏡像(Dockerfile所在的位置):

  1. docker image build -t demo-app:latest . 

-t是要構(gòu)建的鏡像的名稱和標記。構(gòu)建鏡像后,我們可以通過以下方式創(chuàng)建和運行容器:

  1. docker container run -p 8080:8080 -d --name app-container demo-app 

-p是發(fā)布(映射)主機端口到容器端口(在這種情況下,兩個都是8080)。選項-d(detach)指定在后臺運行容器,并用--name指定容器的名稱。

部署在NGINX Web服務器后面 - 直接設置

為實際生產(chǎn)配置servlet容器(例如Tomcat或Jetty)(即在端口80上運行,沒有root用戶和使用SSL)可能不是直接的(但可行)。此,建議在Spring Boot應用程序前使用Web服務器(如Nginx)。這可以通過兩種方式完成; 直接設置或Docker設置。在本節(jié)中,我們將演示直接設置。

在直接設置中,我們直接在localhost上運行Nginx Web服務器和Spring Boot應用程序(當然在不同的端口上)。我們讓Ngnix代理REST請求到Spring Boot應用程序:

  • 在Linux上安裝Nginx Web服務器sudo apt-get install nginx,
  • /etc/ngnix/sites-available/default使用文本編輯器打開文件,
  • 比如說,我們有兩個Spring Boot應用程序需要代理。然后用兩個Spring Boot應用程序的以下塊替換文件中的“location”塊。請注意,可以在此處找到所有Nginx-Java配置。
  1. location /app1 { 
  2.  proxy_pass http://localhost:8080; 
  3. location /app2 { 
  4.  proxy_pass http://localhost:9000; 

在此基礎上對將來的請求http://localhost/app1/將被定向到/http://localhost:8080/,和將來的請求http://localhost/app2/將被引導到/http://localhost:9000/。

負載均衡

如果您正在運行Spring Boot應用程序的多個實例,則可以啟用Nginx以應用負載平衡。例如,如果我們在端口8080,8081和8082上運行3個app1實例。我們可以在這些服務器之間進行負載平衡,如下所示:

打開文件/etc/ngnix/sites-available/default并在文件頂部添加以下塊(在服務器塊之前):

  1. #configure load-balancing  
  2. upstream backend {  
  3.  server localhost:8080;  
  4.  server localhost:8081;  
  5.  server localhost:8082;  

修改app1 的proxy_pass參數(shù),如下所示:

  1. location / app1 {  
  2.  proxy_pass http:// backend;  

基于此請求http://localhost/app1/將被發(fā)送到/http://localhost:8080/,/http://localhost:8081/或/http://localhost:8082/。

部署在NGINX Web服務器后面 - 容器化設置

在容器化設置中,我們將Nginx Web服務器和所有Spring Boot應用程序部署在單獨的Docker容器上。我們讓Nginx(在自己的容器中運行)向Spring Boot應用程序容器代理REST請求。

我們首先將所有Spring Boot應用程序打包在(胖)jar文件中(之前已經(jīng)解釋過)。此時,請注意通過向application.properties(或application.yml)文件添加以下行來為每個Spring Boot應用程序設置單個服務器端口和根上下文路徑:

  1. server.port=8082 
  2. server.servlet.context-path=/search-service 

然后我們將生成的jar包部署在單獨的Docker容器中(之前也有解釋)。

例如,我們部署了四個Spring Boot應用程序; “分析服務”應用程序的單個實例和“搜索服務”應用程序的三個實例。搜索服務應用程序的三個實例將由Nginx負載平衡。

我們基于默認配置創(chuàng)建Nginx配置文件nginx.conf。我們?yōu)槊總€服務添加負載平衡和代理信息,如下所示:

  1. http { 
  2.  upstream backend { 
  3.  server search-service-1:8080
  4.  server search-service-2:8081
  5.  server search-service-3:8082
  6.  } 
  7.  server { 
  8.  listen 80 default_server; 
  9.  listen [::]:80 default_server; 
  10.  root /var/www/html; 
  11.  server_name _; 
  12.  location /search-service { 
  13.  proxy_pass http://backend/search-service; 
  14.  } 
  15.  location /analysis-service { 
  16.  proxy_pass http://analysis-service:8083/analysis-service; 
  17.  } 
  18.  } 
  19. events { worker_connections 1024; } 

請求到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/。

創(chuàng)建配置文件(nginx.conf)后,我們將在Docker容器中部署Nginx Web服務器。為此,我們創(chuàng)建一個Dockerfile,如下所示:

  1. # latest nginx 
  2. FROM nginx 
  3. # copy custom configuration file 
  4. COPY nginx.conf /etc/nginx/nginx.conf 
  5. # expose server port 
  6. EXPOSE 80 
  7. # start server 
  8. CMD ["nginx""-g""daemon off;"

我們?yōu)镹ginx Web服務器構(gòu)建一個Docker鏡像,如下所示:

  1. docker image build -t custom-nginx:latest . 

構(gòu)建所有Docker鏡像后,可以通過docker-compose up在以下docker-compose.yml文件上運行命令來部署所有系統(tǒng):

  1. version: '3.7' 
  2. services: 
  3.  nginx_server: 
  4.  image: custom-nginx 
  5.  ports: 
  6.  - '80:80' 
  7.  networks: 
  8.  - demo-network 
  9.  depends_on: 
  10.  - "search-service-1" 
  11.  - "search-service-2" 
  12.  - "search-service-3" 
  13.  - "analysis-service" 
  14. search-service-1
  15.  image: search-service-1 
  16.  ports: 
  17.  - '8080:8080' 
  18.  networks: 
  19.  - demo-network 
  20. search-service-2
  21.  image: search-service-2 
  22.  ports: 
  23.  - '8081:8081' 
  24.  networks: 
  25.  - demo-network 
  26. search-service-3
  27.  image: search-service-3 
  28.  ports: 
  29.  - '8082:8082' 
  30.  networks: 
  31.  - demo-network 
  32. analysis-service: 
  33.  image: analysis-service 
  34.  ports: 
  35.  - '8083:8083' 
  36.  networks: 
  37.  - demo-network 
  38. networks: 
  39.  demo-network: 
  40.  name: demo-network 

總結(jié)

我們演示了五種部署Spring Boot應用程序的方法。部署的選擇基于整體解決方案體系結(jié)構(gòu),目標平臺的要求,例如安全性和可用資源。

Java架構(gòu)-猜你不知道Spring Boot的幾種部署方式
責任編輯:張燕妮 來源: 今日頭條
相關推薦

2019-07-23 15:56:56

Spring Boot部署servlet

2020-04-27 10:34:23

HTTPDNSDNS網(wǎng)絡協(xié)議

2023-09-08 08:23:29

Servlet程序MVC

2024-11-11 10:58:03

Spring接口編程

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2021-07-30 06:00:31

Prometheus elasticsear運維

2022-07-17 06:53:24

微服務架構(gòu)

2011-09-15 17:10:41

2022-10-13 11:48:37

Web共享機制操作系統(tǒng)

2009-12-10 09:37:43

2021-02-01 23:23:39

FiddlerCharlesWeb

2010-08-06 13:15:35

2018-01-26 08:26:35

RAID陣列組成

2010-08-23 09:56:09

Java性能監(jiān)控

2020-09-15 08:35:57

TypeScript JavaScript類型

2022-11-04 08:19:18

gRPC框架項目

2021-12-29 11:38:59

JS前端沙箱

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2012-11-23 10:57:44

Shell
點贊
收藏

51CTO技術棧公眾號