zoukankan      html  css  js  c++  java
  • springbootdevtools

    Create a new Maven Project  and  we have two class under the package com.example.demo like below screen shot.

    This page mainly focus on how to make the change you make ready to show the result without restarting  spring boot application manually.

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    package com.example.demo;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class HelloController {
        @RequestMapping(value = "hi" , method = RequestMethod.GET)
        public String sayHi() {
            return "Hello World!";
        }
    
    }
    <?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>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.6.RELEASE</version>
            <relativePath/>
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <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>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>

    Then,run the DemoApplication as Java Application or Spring Boot App (if you are using STS),after the application starts up,input the link localhost:8080/hi ,you will get the Hello World! as the output.

    But when you want to change the RequestMapping from "hi" to "hello" ,to make it ready to use you need to change it and restart the application.

    with spring-boot-devtools we just change the code and save it without restart the application manually,spring boot help us restart the application .

    To achieve this , all you need to do are adding  the spring-boot-devtools dependency in the pom.xml and make sure Project>build automatically is chosen in the IDE 

    这里多了一个Optional选项,是为了防止将 devtools 依赖传递到其他模块中。当将应用打包运行后,devtools 会被自动禁用。

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

    On the condition that you add the dependency in the pom.xml file and you don't choose the build automatically within the IDE(Eclipse or STS here),then when you change the the RequestMapping from "hi" to "hello" and save it,spring boot will not restart the application for you ,you have to bulid the pom file and restart the application manualy.Because the spring-boot-devtools monitor the code under the target to restart the application to make the change you made ready to use ,so you choose the build atuomatically and change RequestMapping and save it ,the IDE build and the code under the target is  updated to trigger the restart of the spring boot application automatically.

    For more details,please refer the spring boot  devtools reference guide : http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html

     由于项目的编码是一个连续的过程,并不需要每改一行代码就重启项目。

    此时,可以使用触发文件,在application.yml 中配置spring.devtools.restart.trigger 

     然后在src/main/resource 下创建 .trigger-file

     此时,当开发者修改代码时,不会重启项目;需要重启项目时,开发者需要在修改代码并保存之后,修改 .trigger-file, 项目就会重启。

    如果项目没有改变,只是改变了 .trigger-file 文件,项目不会重启。

    SpringBoot 中使用的自动重启技术涉及两个类加载器,一个是 baseclassloader, 用来加载不会变化的类,例如项目应用的第三方Jar 包;

    另一个是 restartclassloader,用来加载开发者自己写的会变化的类。 

    当改变自己写的代码项目需要重启时,restartclassloader 将被一个新创建的类加载器代替,而 baseclassloader 则继续使用原来的,这种启动方式要比冷启动快很多,因为  baseclassloader 已经存在并且已经加载好。

    当改变POM 文件中的依赖,项目会重启,因为 baseclassloader 会重新加载所依赖的 Jar包。

  • 相关阅读:
    简单的小工具wordlight——让VS变量高亮起来
    Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载
    ECshop 快捷登录插件 支持QQ 支付宝 微博
    设为首页 和 收藏本站js代码 兼容IE,chrome,ff
    PHP获取图片宽度高度、大小尺寸、图片类型、用于布局的img属性
    使用ZeroClipboard解决跨浏览器复制到剪贴板的问题
    Bootstrap3.0学习第二十六轮(JavaScript插件——图片轮播)
    Bootstrap3.0学习第二十五轮(JavaScript插件——折叠)
    Bootstrap3.0学习第二十四轮(JavaScript插件——按钮)
    Bootstrap3.0学习第二十三轮(JavaScript插件——警告框)
  • 原文地址:https://www.cnblogs.com/luffystory/p/7414422.html
Copyright © 2011-2022 走看看