亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot的幾種部署方式是什么樣的

發布時間:2021-10-18 10:13:48 來源:億速云 閱讀:132 作者:柒染 欄目:編程語言

本篇文章為大家展示了SpringBoot的幾種部署方式是什么樣的,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

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

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

<build>  <plugins>  <plugin>  <groupId> org.springframework.boot </ groupId>  <artifactId> spring-boot-maven-plugin </ artifactId>  </ plugin>  </ plugins> </ build>

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

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

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

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

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

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-tomcat</artifactId  <scope>provided</scope> </dependency>

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

@SpringBootApplication public class DemoApp extends SpringBootServletInitializer {  @Override  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {  return builder.sources(DemoApp.class);  }  public static void main(String[] args) {  SpringApplication.run(DemoApp.class, args);  } }

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

在Docker Container中部署

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

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

# latest oracle openjdk is the basis FROM openjdk:oracle # copy jar file into container image under app directory COPY target/demoApp.jar app/demoApp.jar # expose server port accept connections EXPOSE 8080 # start application CMD ["java", "-jar", "app/demoApp.jar"]

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

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

docker image build -t demo-app:latest .

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

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

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

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

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

在直接設置中,我們直接在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配置。

location /app1 {  proxy_pass http://localhost:8080; } location /app2 {  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并在文件頂部添加以下塊(在服務器塊之前):

#configure load-balancing upstream backend {  server localhost:8080;  server localhost:8081;  server localhost:8082; }

修改app1 的proxy_pass參數,如下所示:

location / app1 {  proxy_pass http:// backend; }

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

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

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

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

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

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

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

我們基于默認配置創建Nginx配置文件nginx.conf。我們為每個服務添加負載平衡和代理信息,如下所示:

http {  upstream backend {  server search-service-1:8080;  server search-service-2:8081;  server search-service-3:8082;  }  server {  listen 80 default_server;  listen [::]:80 default_server;  root /var/www/html;  server_name _;  location /search-service {  proxy_pass http://backend/search-service;  }  location /analysis-service {  proxy_pass http://analysis-service:8083/analysis-service;  }  } } 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/。

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

# latest nginx FROM nginx # copy custom configuration file COPY nginx.conf /etc/nginx/nginx.conf # expose server port EXPOSE 80 # start server CMD ["nginx", "-g", "daemon off;"]

我們為Nginx Web服務器構建一個Docker鏡像,如下所示:

docker image build -t custom-nginx:latest .

構建所有Docker鏡像后,可以通過docker-compose up在以下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

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

上述內容就是SpringBoot的幾種部署方式是什么樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民勤县| 苏尼特右旗| 西峡县| 合川市| 株洲市| 文化| 义乌市| 临夏县| 二连浩特市| 西乌| 海伦市| 沽源县| 饶平县| 青河县| 安新县| 文水县| 灌阳县| 泌阳县| 吉首市| 彭泽县| 福安市| 玉田县| 伊宁县| 汝州市| 林甸县| 石泉县| 深圳市| 舒兰市| 宽城| 长汀县| 敖汉旗| 峨眉山市| 霍山县| 收藏| 万山特区| 乐平市| 青铜峡市| 肇源县| 察隅县| 商都县| 安吉县|