SpringBoot WAR包部署詳解

SpringBoot作為一個框架工具,不僅能夠幫助開發者快速構建應用程序,還能夠使得應用程序更加靈活運用。在實際項目開發中,將SpringBoot應用程序打成WAR包後進行部署是很常見的一種方法,本文將介紹SpringBoot WAR包部署的方法及其相關細節。

一、WAR包部署原理

WAR文件的全稱是Web Application Archive,通常也叫Web應用程序壓縮包。將這種類型的壓縮包部署到web伺服器上,就可以讓web伺服器來幫助我們將其解壓並運行。而SpringBoot應用程序的WAR包部署也是類似,它是將整個應用程序打包成一個壓縮包,以web應用程序的形式部署到web伺服器上。

SpringBoot項目如果需要打成WAR包,需要在pom.xml文件中進行相應的配置。通常在<packaging>節點下設置為war,如下所示:

  <packaging>war</packaging>

在進行WAR包部署之前,需要先將應用程序打成一個可執行的WAR包。可以使用如下Maven指令打包:

  mvn clean package

執行此指令之後,會在target目錄下生成一個*.war的可執行WAR包。

二、WAR包部署步驟

Step1:添加SpringBoot啟動類

將SpringBoot項目打成WAR包需要在應用程序的啟動類上添加一個extends SpringBootServletInitializer的類繼承關係,並覆寫configure方法。代碼如下:

  package com.example.springbootdemo;
  
  import org.springframework.boot.builder.SpringApplicationBuilder;
  import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
  
  public class ServletInitializer extends SpringBootServletInitializer {
  
      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
          return application.sources(SpringBootDemoApplication.class);
      }
  
  }

其中SpringBootDemoApplication.class替換成您的SpringBoot應用程序的啟動類。

Step2:修改pom.xml文件

在之前的pom.xml文件中添加如下依賴:

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

這些依賴的加入是為了引入Tomcat容器以及Servlet規範API。

Step3:修改打包方式

在之前的pom.xml文件中,打包方式是jar包。要修改為war包需要更改屬性的設置,具體修改如下:

  <packaging>war</packaging>
  
  ...
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <jvmArguments>-Dspring.profiles.active=product</jvmArguments>
        </configuration>
      ...

在這裡將<packaging>屬性設置為war,然後在<build><plugins><plugin>下面添加spring-boot-maven-plugin插件。同時我們將在應用程序中使用profile進行配置,以便在激活時能夠根據需要獲取不同的配置文件。

Step4:打包WAR包

完成上述修改之後,使用mvn clean package命令進行打包即可。在編譯完畢之後,會在target目錄生成一個.war文件。

Step5:部署到Tomcat

在Tomcat的$TOMCAT_HOME/webapps目錄下,放置新生成的WAR包。Tomcat會自動解壓,啟動該應用程序。

三、WAR包部署注意事項

1、Port衝突

在Tomcat中部署WAR包時,應該避免埠衝突。啟動Tomcat伺服器並發布WAR包後,伺服器可能會遇到埠佔用問題。可以在Tomcat內的server.xml文件中更改埠號解決。除此之外,SpringBoot還支持使用外部的服務埠號,可以在application.properties或application.yml中指定。

2、靜態資源訪問

在WAR包部署下,src/main/resources/staticsrc/main/resources/public中的靜態資源不再存在,會被打包進WAR包的根目錄下。所以,URL和classpath訪問這些文件時需要使用特定的相對路徑,參考下面的代碼:

  
  http://localhost:8080/{yourAppName}/{yourResourcePath}
  
  
  ClassPathResource resource = new ClassPathResource("/{yourResourcePath}");

3、數據源配置

在WAR包部署下,數據源的配置需要放在/WEB-INF/classes/application.propertiesapplication.yml文件中。示例如下:

  #Properties
  spring.datasource.url=jdbc:postgresql://localhost:5432/my_db
  spring.datasource.username=user
  spring.datasource.password=pass
  
  #YAML
  spring:
    datasource:
      url: jdbc:postgresql://localhost:5432/my_db
      username: user
      password: pass

4、JSP頁面處理

在WAR包部署下,SpringBoot默認不支持使用JSP頁面。我們需要進行額外的配置才能使其實現。通常需要在Web項目的配置文件中,添加如下代碼:

  @Bean
  public InternalResourceViewResolver jspViewResolver() {
      InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
      viewResolver.setPrefix("/WEB-INF/jsp/");
      viewResolver.setSuffix(".jsp");
      return viewResolver;
  }

同時,也需要在application.properties/application.yml文件中配置視圖文件的路徑,如下所示:

  #Properties
  spring.mvc.view.prefix=/WEB-INF/jsp/
  spring.mvc.view.suffix=.jsp

  #YAML
  spring:
    mvc:
      view:
        prefix: /WEB-INF/jsp/
        suffix: .jsp

四、小結

通過本篇文章的詳細介紹,我們了解到了SpringBoot WAR包部署的整個流程,包括如何打成WAR包、如何部署和相關注意事項。希望這些內容能夠幫助您更好地了解War包部署。

最後,附上一個小例子,這個例子可以讓你更好地理解本文所講內容:

  package com.example.springbootdemo;
  
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.web.bind.annotation.GetMapping;
  import org.springframework.web.bind.annotation.RestController;
  
  @SpringBootApplication
  @RestController
  public class SpringBootDemoApplication extends SpringBootServletInitializer {
  
      public static void main(String[] args) {
          SpringApplication.run(SpringBootDemoApplication.class, args);
      }
  
      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
          return application.sources(SpringBootDemoApplication.class);
      }
  
      @GetMapping("/")
      public String hello(){
          return "hello, world!";
      }
  
  }

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/201073.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-06 11:29
下一篇 2024-12-06 11:29

相關推薦

  • 從ga角度解讀springboot

    springboot作為目前廣受歡迎的Java開發框架,其中的ga機制在整個開發過程中起著至關重要的作用。 一、ga是什麼 ga即Group Artifacts的縮寫,它是Mave…

    編程 2025-04-29
  • SpringBoot Get方式請求傳參用法介紹

    本文將從以下多個方面對SpringBoot Get方式請求傳參做詳細的闡述,包括URL傳參、路徑傳參、請求頭傳參、請求體傳參等,幫助讀者更加深入地了解Get請求方式下傳參的相關知識…

    編程 2025-04-27
  • SpringBoot如何設置不輸出Info日誌

    本篇文章將帶您了解如何在SpringBoot項目中關閉Info級別日誌輸出。 一、為什麼要關閉Info日誌 在開發中,我們經常會使用Log4j、Logback等框架來輸出日誌信息,…

    編程 2025-04-27
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25

發表回復

登錄後才能評論