Springboot 和我們之前學習的web 應用程式不一樣,其本質上是一個 Java 應用程式,那麼又如何部署呢?
通常來說,Springboot 部署會采用兩種方式:全部打包成一個jar,或者打包成一個war。
一、jar方式
1、前面已經寫好了一個spring boot項目,(
IJ建立一個spring boot項目)dos指令進入該項目目錄

2、打包成jar
輸入指令
mvn install
在target目錄下生成了一個jar檔案
3、運作該jar
java -jar target/springboot-0.0.1-SNAPSHOT.jar
4、通路http://localhost:8080/hello
二、war方式
1、用IJ建一個maven項目
2、具體代碼
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.hpu</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>springboot</description>
<packaging>war</packaging> <!--表示打包成war-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
<!--打包的時候可以不用包進去,别的設施會提供。事實上該依賴理論上可以參與編譯,測 試,運作等周期。
相當于compile,但是打包階段做了exclude操作-->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
作注釋的那個依賴表示排除了spring boot的内置容器,spring boot内置容器是tomcat8,部署到其它版本的tomcat下會報錯,還有另外一種排除的寫法
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
Application.java
package edu.hpu.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.support.SpringBootServletInitializer;//不要導錯包了
@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
這個和前面的SpringBoot項目有三個差別:
(1)、繼承org.springframework.boot.web.servlet.support.SpringBootServletInitializer
(2)、添加注解@ServletComponentScan
(3)、重寫configure方法
HelloController.java
package edu.hpu.springboot.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "你好,好他媽頭疼";
}
}
3、dos視窗進入項目所在目錄,輸入指令
mvn clean package
接下來檢視項目的target目錄
可以看到生成了一個war檔案,把檔案重命名為ROOT.war,這樣做的目的是把它放在webapps目錄下時,可以直接通過localhost:8080/hello通路,不然的話這個連結就太長了。
接下來把webapps下的檔案都删掉,這是為了防止通路時出現404錯誤。
startup.bat,啟動tomcat,一堆可以作為三流科幻片黑客入侵畫面的代碼閃過
這樣tomcat就跑起來了,通路網址localhost:8080/hello
這個倒黴催的Spring Boot war部署方式就算是完成了。
三、熱部署
熱部署:對于Java應用程式來說,熱部署就是在運作時更新Java類檔案。使用熱部署可以不重新開機應用的情況下,更新應用。舉個例子,就像電腦可以在不重新開機的情況下,更換U盤。熱部署是利用類加載機制實作的,項目更新後,銷毀該自定義ClassLoader,更新class類檔案,建立新的ClassLoader去加載更新後的class類檔案。
SpringBoot熱部署:
1、在pom.xml中新增依賴
<!--新增熱部署插件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!--這個設定為true熱部署才會生效-->
</dependency>
完整pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.hpu</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>springboot</description>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--新增熱部署插件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!--這個設定為true熱部署才會生效-->
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、運作Application,通路網址localhost:8080
3、修改HelloController内容,重新啟動Application,通路網址loclhost:8080
四、錯誤及解決
Perhaps you are running on a JRE rather than a JDK
從字面上看,大概是應該配置的jdk配成了jre,它想要jdk,那給它吧。查了一下,這是是以前的舊坑,以前裝Java的時候,jdk和jre沒有分的那麼開,是以現在就坐蠟了,沒辦法,重新配置吧。
Java JDK 下載下傳安裝,以及環境配置