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 下载安装,以及环境配置