SpringBoot学习笔记(二、部署方式)

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方式

这玩意儿可真是个坑啊,搞了一天多,各种出错误,真是让人不由感慨,彼其娘之。
所以最好还是不要用ij直接创建Spring Boot,
不要这样建好了,进入正常步骤:

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部署方式就算是完成了。上面最后生成的war文件也在这了。

ROOT.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 下载安装,以及环境配置
在这里插入图片描述

其它的坑随着重建项目之后就都填平了。

参考:
【1】、https://blog.csdn.net/qq_33512843/article/details/80951741
【2】、https://blog.csdn.net/yulutian/article/details/80157626?utm_source=blogxgwz1
【3】、http://how2j.cn/k/springboot/springboot-war/1655.html#nowhere
【4】、https://www.cnblogs.com/pfxiong/p/4070462.html

猜你喜欢

转载自blog.csdn.net/sinat_40770656/article/details/89343809