8.Spring Boot 打包與熱部署

弓長日含發表於2020-11-12

熱部署

Spring Boot提供了DevTool。直接在pom.xml檔案中新增配置。

  1. 新增依賴

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-devtools</artifactId>
    </dependency>
    
  2. 在maven外掛依賴中新增

    <build>
    	<plugins>
    	  	<plugin>
    			<groupId>org.springframework.boot</groupId>
    		    <artifactId>spring-boot-maven-plugin</artifactId>
    		    <!--新增fork-->
    		    <configuration>
    		    	<fork>true</fork>
    		    </configuration>
    	    </plugin>
    	</plugins>
    </build>
    

    提示:再使用Idea快捷建立Spring Boot專案時可以勾選Spring Boot DevTools選擇即可。

  3. 修改Idea設定
    在這裡插入圖片描述
    在這裡插入圖片描述
    注意:這裡要用Idea的debug啟動,debug啟動,debug啟動。

如果不是前後端分離的專案,在配置檔案中新增配置,spring.thymeleaf.cache=false關閉頁面快取。

jar包

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
選中maven,點選執行。
控制檯輸出日誌:
在這裡插入圖片描述

打的jar包在專案目錄的target目錄中。

Windows下執行:
在這裡插入圖片描述
進入jar包目錄,執行 java -jar 包名
在這裡插入圖片描述
執行成功。

擴充套件:
如果打好了jar包,配置檔案中的一些引數需要修改。如果不想重新打jar包。可以重新把一份新的application.yml配置檔案與打好的jar包放在同級目錄。重新執行即可。

驗證:
從上述日誌中看到,埠為80。這裡我重新複製一份配置檔案,將埠改為8088。重新執行檢視埠。
在這裡插入圖片描述
在這裡插入圖片描述
這裡是在Windows下執行,在Linux下執行差不多,
我們先把jar包,配置檔案(可選)上傳至伺服器,執行。
在這裡插入圖片描述
啊咧,80埠已經被專案佔用了。
在這裡插入圖片描述

重新上傳一份8088埠的配置檔案。
在這裡插入圖片描述
驗證成功以後,還有一個問題,無論是Windows視窗還是Linux視窗執行的jar包,視窗關閉以後,專案程式就結束了。但是你視窗不會一直開著。

在Linux下我們需要後臺執行。

nohup java -jar springboot-demo2-0.0.1-SNAPSHOT.jar >> srpingboot.log &

解釋:後臺執行SpringBoot的jar包,並將執行java -jar springboot-demo2-0.0.1-SNAPSHOT.jar命令的輸出日誌追加輸出到springboot.log檔案中。

劃重點:

  • >> 輸出到檔案,追加操作。
  • > 輸出到檔案,覆蓋操作。
  • & 在Linux命令的末尾加上一個 & 號,將這個任務放到後臺去執行
  • nohup no hang up(不掛起),用於在系統後臺不結束通話地執行命令,退出終端不會影響程式的執行。
    這些都是一些Linux命令,可以自己敲一敲測試即可。

後臺執行,如何關閉?直接kill。kill -9 pid(執行專案程式的PID)

war包

SpringBoot不推薦打war包,但是你說我頭鐵,非要打war包咧?可!

修改pom.xml

<!-- 將jar改成war,如果沒有,則新增-->
<packaging>war</packaging>
<!-- 新增 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<!-- 打包執行時,排除 -->
	<scope>provided</scope>
</dependency>

注意這兩處的節點位置。

修改啟動類

此時啟動類中的main方法已經失效了。以測試專案為例

@SpringBootApplication
@MapperScan("com.demo.dao")
public class SpringbootDemo2Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootDemo2Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemo2Application.class, args);
    }

}

繼承SpringBootServletInitializer類並重寫configure方法。注意方法體的書寫。

接下來就繼續使用maven打包即可。引數上面打jar的使用maven方式。

打好的war包是需要放在容器中執行的,簡單的就放在Tomcat中的webapps目錄中。啟動Tomcat即可。

在這裡插入圖片描述
war包已經打好了,直接丟Tomcat了。
在這裡插入圖片描述
啟動Tomcat即可。

但是在實際開發中,還是不推薦打war包。

相關文章