抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

SpringBoot工程搭建

使用idea搭建SpringBoot

使用initializer 创建项目

  1. File->new->project;

  2. 选择“Spring Initializr”,点击next;(jdk1.8默认即可)

  3. 完善项目信息,组名可不做修改,项目名可做修改;最终建的项目名为:test,src->main->java下包名会是:com->example->test;点击next;

  1. Web下勾选Spring Web;点击next;

  2. 选择项目路径,点击finish;打开新的窗口;

  3. 刚创建好的项目目录结构

  4. 使用 Maven 管理依赖,自动生成的 POM 文件内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>test</name>
    <description>Demo project for Spring Boot</description>

    <properties>
    <java.version>1.8</java.version>
    </properties>

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
    <exclusion>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    </dependencies>

    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build>

    <!--自己添加的阿里云仓库 如果不添加会到中央仓库下载 很慢-->
    <repositories>
    <repository>
    <id>nexus-aliyun</id>
    <name>Nexus aliyun</name>
    <layout>default</layout>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    <releases>
    <enabled>true</enabled>
    </releases>
    </repository>
    </repositories>

    </project>
  5. src/main/resource 目录下生成的 application.properties 是 Spring Boot 的配置文件(也可以修改为 .yml 格式),初始化此文件无任何内容,需要开发人员自己配置,有关 Spring Boot 的配置不在本文讨论范围内。

  6. Idea SpringBootApplication.java 中包含应用入口,内容如下

    1
    2
    3
    4
    5
    6
    @SpringBootApplication
    public class TestApplication {
    public static void main(String[] args) {
    SpringApplication.run(TestApplication.class, args);
    }
    }
  7. 自定义一个 Controller 处理首页 HTTP 请求(Spring MVC 知识)

    1
    2
    3
    4
    5
    6
    7
    8
    @RestController
    public class IndexController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
    return "这是 Spring Boot Web 首页";
    }
    }
  8. 运行 Idea SpringBootApplication 中的 main 方法启动工程,从启动日志中可以看出,Spring Boot Web 使用内嵌的 Tomcat 服务器

  9. 打开浏览器,输入 http://localhost:8080/

普通方式创建项目

  1. File->new->project;

  2. 选择“maven”,点击next;(jdk1.8默认即可)

  3. 配置好项目名称以及 坐标的选项点击finish完成即可。

选择新窗口打开

  1. 在POM文件配置spring-boot-starter-parent

  2. 在POM文件配置spring-boot-starter-web

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

  3. 创建启动类

    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    public class DemoApplication {

    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
    }
    }
  4. 创建IndexController

    1
    2
    3
    4
    5
    6
    7
    8
    @RestController
    public class IndexController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
    return "这是 Spring Boot Web 首页";
    }
    }
  5. 运行 Idea SpringBootApplication 中的 main 方法启动工程,从启动日志中可以看出,Spring Boot Web 使用内嵌的 Tomcat 服务器

  6. 打开浏览器,输入 http://localhost:8080/

在idea中使用热部署

在实际开发过程中,每次修改代码就得将项目重启,重新部署,比如修改一个html代码就需要重启服务器,曾经帮同学调试过一个代码,html打印一个alert() 然后竟然重启半个小时,改了不到十行代码,重启过程就已经占用了开发过程的十分之九,开发效率何其地下,如果加上热部署会快许多许多。

名词解释

devtools:是spring boot的一个热部署工具,当修改了classpath下的文件(包括类文件、属性文件、页面等)时,会重新启动应用(由于其采用的双类加载器机制,这个启动会非常快,如果发现这个启动比较慢,可以选择使用jrebel)

双类加载器机制:boot使用了两个类加载器来实现重启(restart)机制:base类加载器+restart类加载器。

base类加载器:用于加载不会改变的jar(第三方依赖的jar)

restart类加载器:用于加载我们正在开发的jar(整个项目里我们自己编写的类)。当应用重启后,原先的restart类加载器被丢掉、重新new一个restart类加载器来加载这些修改过的东西,而base类加载器却不需要动一下。

修改pom文件

在pom文件加入 devtools

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

注意

  • devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的

  • 配置了true后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。

​ 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

修改application.yml

在application.yml中配置一下devtools

1
2
3
4
5
6
spring:
devtools:
restart:
#需要实时更新的目录
additional-paths: resources/**,static/**,templates/**
enabled: true #设置开启热部署

IDEA中配置

当我们修改了类文件后,idea不会自动编译,得修改idea设置。

配置自动编译

File-Settings-Compiler-Build Project automatically

开启运行时自动编译

在idea中输入快捷键 ctrl + shift + alt + / 选择注册

在打开的窗口 勾上 Compiler autoMake allow when app running

注意:第一次选择应该实在下面不在第一行,需要向下找找

Chrome禁用缓存

F12或者“Ctrl+Shift+I”,打开开发者工具,“Network” 选项卡下 选中打勾 “Disable Cache(while DevTools is open)”

不能使用分析
  1. 对应的spring-boot版本是否正确;
  2. 是否加入spring-boot-maven-plugin,以及属性true
  3. idea 是否开启了Build Automatically
  4. 如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。
补充
  1. 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

  2. 如果想改变默认的设置,可以自己设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会导致restart操作了。

  3. 如果要在保留默认设置的基础上还要添加其他的排除目录:spring.devtools.restart.additional-exclude

  4. 如果想要使得当非classpath下的文件发生变化时应用得以重启,使用:spring.devtools.restart.additional-paths,这样devtools就会将该目录列入了监听范围。

关闭自动重启

设置 spring.devtools.restart.enabled 属性为false,可以关闭该特性。可以在application.properties中设置,也可以通过设置环境变量的方式。

1
2
System.setProperty("spring.devtools.restart.enabled","false");  
SpringApplication.run(MyApp.class, args);

测试

注意以下的热部署方式在IDEA是默认没有打开自动编译的,手动编译需要快捷键(Ctrl+Shift+F9),自动编译的修改配置如下:(注意刷新不要太快,会有1-2秒延迟)

html测试

在html写一些字符

刷新浏览器查看

java代码测试

在controller增加输出语句

刷新浏览器测试

测试通过

评论