Spring Boot 技术探索

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

5、Spring Boot的热部署——使用springloaded进行无需重启的热部署

平台环境:

名称

版本号

Mac OS X

10.14.5

JDK

1.8.0_201

Apache Maven

3.6.0

IntelliJ IDEA

2019.1 (Ultimate Edition)

Spring Boot

2.1.6.RELEASE

 

1、下载springloaded

从官网下载jar包,地址:https://github.com/spring-projects/spring-loaded

或者用Maven形式下载:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>springloaded</artifactId>
    <version>1.2.8.RELEASE</version>
</dependency>

 

2、IDEA开发工具界面的右上角,找到工程名旁边的倒三角,展开选择Edit Configuration

 

3、找到Spring Boot——项目工程名下的Configuration界面,配置VM options

 

格式:

-javaagent:<pathTo>/springloaded-{VERSION}.jar -noverify

 

例如:

-javaagent:/Users/wang/.m2/repository/org/springframework/springloaded/1.2.8.RELEASE/springloaded-1.2.8.RELEASE.jar -noverify

 

4、选择 IntelliJ IDEA | Preferences | Build,Execution,Deployment | Compiler 菜单,然后勾选 Build project automatically 复选框

5、现在改动java文件后,稍等1秒钟等待自动编译,就可以看到效果啦。

 

下面开始测试:

由于使用了@RestController,因此要增加spring-boot-starter-web的maven引用:

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

 

测试Controller:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class IndexController
{
    @RequestMapping("/")
    public String index()
    {
        return "index";
    }
}

 

运行项目,浏览器访问http://localhost:8080

index

 

随意修改返回值后:

index123

 

但是注意:

问:它会重新加载类文件中可能发生变化的任何内容吗?

答:不,您不能更改类的层次结构。还有一些构造函数的用法现在确实还不能处理。
问:随着对象的改变,反射会发生什么变化?

答:反射结果会随着对象重新加载而随时变化。例如,修改一个类添加一个新方法,并在重新加载之后调用getDeclaredMethods(),这意味着您将在结果中看到这个新方法。但这确意味着,如果您的系统中已有缓存,且假设反射信息假定缓存永远不会变化,那么这些缓存会在重新加载后被清除。
问:我如何知道什么时候发生了重新加载,以便我可以清理我的状态?

答:你可以写一个插件,当重新加载发生时调用它,然后你可以采取适当的行为。创建一个类实现ReloadEventProcessorPlugin接口,然后通过SpringLoadedPreProcessor.registerGlobalPlugin(plugin)注册它。(还有其他注册插件的方法,希望能获得一些文档!)
问:目前代码库的状态如何?

答:这项技术目前已成功地用于Grails的重新加载。它确实需要一些提高性能方面的工作,还需要一些重构方面的改进。目前它需要升级,以兼容inDy(invokedynamic)指令和Java 7中新增的常量池条目。

 

Bootstrap Thumbnail Second
MySQL

MySQL is the world's most popular open source database.

GO

Bootstrap Thumbnail Third
算法基础

本书介绍了什么是计算机算法,如何描述它们,以及如何来评估它们。

GO