第2章 开启Spring Boot之旅
2.1 创建第一个Spring Boot项目
有两种方式来构建Spring Boot项目的基础框架:第一种是使用Spring官网提供的构建页面,第二种是使用IntelliJ IDEA中的Spring插件。
2.1.1 认识Spring Initializr
Spring官方提供了Spring Initializr 英 [ɪ’nɪʃəlaɪzə] 美 [ɪ’nɪʃəlaɪzə] 来进行Spring Boot项目的初始化。这是一个在线生成Spring Boot基础项目的工具,可以将其理解为Spring Boot项目的“初始化向导”,它可以帮助开发人员快速创建一个Spring Boot项目。接下来将讲解如何使用Spring Initializr快速初始化一个Spring Boot骨架工程。
访问Spring官方提供的Spring Initializr网站,官网地址:https://start.spring.io/,打开浏览器并输入Spring Initializr的网站地址,页面如图2-1所示。
从图2-1可以看到Spring Initializr 页面展示的内容。如果想初始化一个Spring Boot项目需要提前对其进行简单的配置,直接对页面中的配置项进行勾选和输入即可。在默认情况下相关配置项已经有缺省值,可以根据实际情况进行简单修改。
需要配置的参数释义如下所示。
-
Project:表示将要初始化的Spring Boot项目类型,可以选择Maven构建或者Gradle构建,这里选择常用的Maven方式。
-
Language:表示编程语言的选择,支持Java、Kotlin和Groovy。
-
Spring Boot:表示将要初始化的Spring Boot项目所使用的Spring Boot版本。由于版本更新迭代较快,Spring Initializr页面会展示最新的几个Spring Boot版本号。其他的版本号虽然不会在这里展示,但是依然可以正常使用。
-
Project Metada:表示项目的基础设置,包括项目包名的设置、打包方式、JDK版本选择等。
-
Group:即GroupID,表示项目组织的标识符,实际对应Java的包结构,是main目录里Java的目录结构。
-
Artifact :即ArtifactId,表示项目的标识符,实际对应项目的名称,也就是项目根目录的名称。
-
Description :表示项目描述信息。
-
Package name:表示项目包名。
-
Packaging :表示项目的打包方式,有Jar和War两种选择。在Spring Boot项目初始化时,如果选用的方式不同,那么导入的打包插件也有区别。
-
Java:表示JDK版本的选择,有15、11和8三个版本供开发人员选择。
-
Dependencies:表示将要初始化的Spring Boot项目所需的依赖和starter。如果不选择此项的话,在默认生成的项目中仅有核心模块spring-boot-starter和测试模块spring-boot-starter-test。在这个配置项中可以设置项目所需的starter,比如Web开发所需的依赖、数据库开发所需的依赖等。
2.1.1 创建Spring Boot项目
2.1.1.1 使用Spring Initializr初始化项目
在Spring Initializr页面中的配置项需要开发人员逐一进行设置,过程非常简单,根据项目情况依次填写即可。
在本次演示中,开发语言选择Java。因为本地安装的项目管理工具是Maven,在Project项目类型选项中勾选Maven Project。Spring Boot版本选择2.6.2,根据实际开发情况也可以选择其他稳定版本。即使这里已经选择了一个版本号,在初始化成功后也能够在项目中的pom.xml文件或者build.gradle文件中修改Spring Boot版本号。
在项目基础信息中,Group输入框中填写“cn.xueden”,Artifact输入框中填写“springboot-demo”,Name输入框中填写“springboot-demo”,Description输入框中填写“springboot 第一个项目”,Package name输入框中填写“cn.xueden”,Packaging打包方式选择Jar,JDK版本选择8。
由于即将开发的是一个Web项目,因此需要添加web-starter依赖,点击Dependencies右侧的“ADD DEPENDENCIES”按钮,在弹出的弹框中输入关键字“web”并选择“Spring Web:Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.”如图2-2所示。
很明显,该项目将会采用Spring MVC开发框架并且使用Tomcat作为默认的嵌入式容器。
至此,初始化Spring Boot项目的选项配置完成,如图2-3所示。
最后,点击页面底部的“Generate”按钮,即可获取一个Spring Boot基础项目的代码压缩包。
2.1.1.2 使用IDEA编辑器初始化Spring Boot项目
在IDEA编辑器中内置了初始化Spring Boot项目的插件,可以直接新建一个Spring Boot项目,创建过程如图2-4所示。
需要注意的是,这种方式仅在商业版本的IDEA编辑器中可行。IDEA编辑器社区版本在默认情况下不支持直接生成Spring Boot项目。
2.1.2 项目结构
在使用IDEA编辑器打开项目之后,可以看到Spring Boot项目的目录结构,如图2-5所示。
Spring Boot的目录结构主要由以下部分组成:
- src/main/java表示Java程序开发目录,开发人员在该目录下进行业务代码的开发。这个目录对于Java Web开发人员来说应该比较熟悉,唯一的不同是Spring Boot项目中会多一个主程序类。
- src/main/resources表示配置文件目录,主要用于存放静态文件、模板文件和配置文件。它与普通的Spring项目相比有些区别,该目录下有static和templates两个目录,是Spring Boot项目默认的静态资源文件目录和模板文件目录。在Spring Boot项目中是没有webapp目录的,它默认是使用static和templates两个文件夹。
- static目录用于存放静态资源文件,如JavaScript文件、图片、CSS文件。
- templates目录用于存放模板文件,如Thymeleaf模板文件或者FreeMarker文件。
- src/test/java表示测试类文件夹,与普通的Spring项目差别不大。
- pom.xml用于配置项目依赖。
以上即为Spring Boot项目的目录结构,与普通的Spring项目存在一些差异,但是在正常开发过程中这个差异的影响并不大。真正差别较大的地方应该是部署和启动方式的差异,接下来将详细介绍Spring Boot项目的启动方式。
2.1.3 pom.xml详解
Spring Boot项目根目录下的pom.xml文件是Maven项目中非常重要的配置文件。pom.xml配置文件主要分为四部分,下面就来一一介绍pom.xml文件的各个组成部分以及它们的作用。
2.1.3.1 项目的描述信息
<groupId>cn.xueden</groupId>
<artifactId>springboot-demo2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-demo2</name>
<description>Demo project for Spring Boot</description>
上面的配置内容基本是创建项目时定义的有关项目的基本描述信息,其中比较重要的是groupId、artifactId。各个属性说明如下:
- groupId:项目的包路径。
- artifactId:项目名称。
- version:项目版本号。
- packaging:一般有jar、war两个值,表示使用Maven打包时是构建成JAR包还是WAR包。
- name:项目名称。
- description:项目描述。
2.1.3.2 项目的依赖配置信息
此部分为项目的依赖信息,主要包括Spring Boot的版本信息和第三方组件的版本信息。示例代码如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-native</artifactId>
<version>${spring-native.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
项目的依赖信息主要分为parent和dependencies两部分。
- parent:配置父级项目的信息。Maven支持项目的父子结构,引入后会默认继承父级的配置。此项目中引入spring-boot-starter-parent定义Spring Boot的基础版本。
- dependencies:配置项目所需要的依赖包,Spring Boot体系内的依赖组件不需要填写具体版本号,spring-boot-starter-parent维护了体系内所有依赖包的版本信息。
另外,标签是Maven项目定义依赖库的重要标签,通过groupId、artifactId等“坐标”信息定义依赖库的路径信息。
2.1.3.3 构建时需要的公共变量
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
上面配置了项目构建时所使用的编码、输出所使用的编码,最后指定了项目使用的JDK版本。
2.1.3.4 构建配置
此部分为构建配置信息,这里使用Maven构建Spring Boot项目,所以必须在中添加spring-boot-maven-plugin插件,它能够以Maven的方式为应用提供Spring Boot的支持。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
上面配置spring-boot-maven-plugin构建插件,将Spring Boot应用打包为可执行的JAR或WAR文件,然后以简单的方式运行Spring Boot应用。如果需要更改为Docker构建方式,则只要更改此部分即可。
2.1.4 第一个helloworld程序
熟悉Spring Boot的项目目录结构以及项目中非常重要的文件pom.xml之后,接下来通过第一个helloworld示例程序演示Spring Boot项目究竟是如何运行的。
步骤01 在目录src\main\java\cn\xueden\helloworld\controller下创建HelloController,然后添加/hello的路由地址和方法,示例代码如下:
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "Hello String Boot";
}
}
在上面的示例中,我们创建了HelloController并创建了一个hello()方法,最后使用@RestController和@RequestMapping注解实现HTTP路由。
1)@RestController表示HelloController为数据处理控制器。Spring Boot中有Controller和RestController两种控制器,都用来表示Spring中某个类是否可以接收HTTP请求,但不同的是:
- @Controller:返回数据和页面,处理HTTP请求。
- @RestController:返回客户端数据请求,主要用于RESTful接口。
2)@RequestMapping("/hello")提供路由映射,意思是"/hello"路径的HTTP请求都会被映射到hello()方法上进行处理。
步骤02 运行helloworld程序。
右击项目中的HelloApplication→run命令就可以启动项目,若出现如图2-6所示的内容则表示启动成功。
通过系统的启动日志可以看到,系统运行在8080端口。如果需要切换到其他端口,可在application.properties配置文件中自行定义。
步骤03 打开浏览器,访问http://localhost:8080/hello地址,查看页面返回的结果,如图2-7所示。
访问/hello地址后,后台成功接收到页面请求并返回“Hello Spring Boot ”,说明我们的第一个Spring Boot项目运行成功。
2.2 启动Spring Boot项目
2.2.1 在IDEA编辑器中启动Spring Boot项目
由于IDEA编辑器对于Spring Boot项目的支持非常友好,在项目导入成功后会被自动识别为Spring Boot项目,可以快速进行启动操作。上面的例子,我们是在主类上右键选择run启动,在IDEA编辑器中,有以下三种方式可以启动Spring Boot项目。
(1)主类上的启动按钮:打开程序启动类,比如本次演示的NewBeeMallApplication. java,在IDEA代码编辑区域中可以看到左侧有两个绿色的三角形启动按钮,点击任意一个按钮即可启动Spring Boot项目。如图2-8所示。
(2)右键运行Spring Boot的主程序类:与普通Java类的启动方式类似,在左侧Project侧边栏或者类文件编辑器中,执行右键点击操作,可以看到启动main()方法的按钮,点击“Run ‘NewbeeMallApplication.main()’ ”即可启动Spring Boot项目,如图2-9所示。
(3)工具栏中的Run/Debug按钮:点击工具栏中的Run/Debug按钮也可以启动Spring Boot项目,如图2-10所示。
Spring Boot项目的启动比普通的Java Web项目更便捷,减少了几个中间步骤,不用配置Servlet容器,也不用打包并且发布到Servlet容器再启动,而是直接运行主方法即可启动项目。其开发、调试都十分方便且节省时间。
2.2.2 Maven插件启动
在项目初始化时,配置项选择的项目类型为Maven Project,pom.xml文件中会默认引入spring-boot-maven-plugin插件依赖,因此可以直接使用Maven命令来启动Spring Boot项目,插件配置如下:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
如果在pom.xml文件中没有该Maven插件配置,是无法通过这种方式启动Spring Boot项目的,这一点需要注意。
Maven插件启动Spring Boot项目的步骤如下:首先点击下方工具栏中的Terminal,打开命令行窗口,然后在命令行中输入命令mvn spring-boot:run并执行该命令,即可启动Spring Boot项目,如图2-11所示。
2.2.3 java-jar命令启动
在项目初始化时,配置项选择的打包方式为Jar,那么项目开发完成打包后的结果就是一个jar包文件。通过Java命令行运行jar包的命令为java -jar xxx.jar,因此可以使用这种方式启动Spring Boot项目,如图2-12所示。
(1)首先点击下方工具栏中的Terminal打开命令行窗口。
(2)然后使用Maven命令将项目打包,执行命令为 mvn clean package -Dmaven.test.skip=true ,等待打包结果即可。
(3)在打包成功后进入target目录,切换目录的命令为cd target。
(4)最后是启动已经生成的jar包文件,执行命令为java -jar springboot-demo-0.0.1-SNAPSHOT.jar。
需要注意的是,每次在项目启动之前,如果使用了其他方式启动项目工程,则需要将其关掉,否则会因为端口占用导致启动报错,进而无法正常启动Spring Boot项目。
2.3 单元测试
单元测试在日常项目开发中必不可少,Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持,以及如何在Spring Boot项目中进行单元测试。
2.3.1 Spring Boot集成单元测试
单元测试主要用于测试单个代码组件,以确保代码按预期方式工作。目前流行的有JUnit或TestNG等测试框架。Spring Boot封装了单元测试组件spring-boot-starter-test。下面通过示例演示Spring Boot是如何实现单元测试的。
步骤01 引入依赖
首先创建Spring Boot项目。在项目中引入spring-boot-starter-test组件,示例配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
步骤02 创建单元测试
在src/test目录下新建一个HelloTest测试类,如果只想输出一句“Hello Spring Boot Test”,只需要用一个@Test注解即可。示例代码如下:
@SpringBootTest
public class HelloTest {
@Test
public void hello(){
System.out.println("Hello Spring Boot Test");
}
}
在类的上面添加@SpringBootTest注解,系统会自动把这段程序加载到Spring Boot容器。@Test注解表示该方法为单元测试方法。
步骤03 运行单元测试
单击Run Test或在方法上右击,再选择“Run ‘hello’”,运行测试方法,运行结果如图2-13所示。
由图2-13可知,单元测试方法运行成功并输出相应的结果,同时IDEA也会显示运行的所有单元测试结果,包括测试是否通过、运行时间、测试总数和成功次数等。
以上示例中的测试方法只是spring-boot-starter-test组件中的一部分功能,Spring Boot自带的spring-boot-starter-test框架对测试的支持非常完善,包括Web请求测试、Service方法测试等,后面会逐一介绍。
2.3.2 测试Service方法
一般使用Spring Boot进行单元测试主要是针对Service和API(Controller)进行。接下来通过示例演示Spring Boot如何测试Service方法。
步骤01 创建Service测试类
创建Service测试类非常简单,使用IDEA可以一键自动创建单元测试类。首先,选择需要测试的Service类或方法,然后在对应的Service类中右击,选择Go To→Test→Create New Test,打开如图2-14所示的创建测试类界面。
步骤02 实现单元测试
在上面创建好的UserServiceTest类中会自动创建对应的单元测试方法,我们只需要在测试方法中实现对应的测试代码即可,具体的示例代码如下:
@SpringBootTest
class UserServiceImplTest {
@Autowired
private IUserService userService;
@Test
void getInfo() {
Assert.assertEquals("xueden", userService.getInfo());
}
}
如以上示例代码所示,在自动测试类上增加@SpringBootTest注解即可。首先注入需要测试的Service,然后在单元测试中调用该方法,最后通过Assert断句判断返回结果是否正确。
执行单元测试也非常简单,只需将鼠标放在对应的方法上,右击并选择Run执行该方法即可。
2.3.3 测试Controller接口方法
上面是针对Service进行测试,但是有时需要对API(Controller)进行测试,这时需要用到MockMvc类。MockMvc能够模拟HTTP请求,使用网络的形式请求Controller中的方法,这样可以使得测试速度快、不依赖网络环境,而且它提供了一套完善的结果验证工具,测试和验证也非常简单、高效。
spring-boot-starter-test具备强大的Mock能力,使用@WebMvcTest等注解实现模拟HTTP请求测试。下面通过示例演示如何测试Controller接口。
步骤01 创建Controller的测试类HelloControllerTest,实现单元测试方法。示例代码如下:
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void hello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/hello") //执行一个请求
.contentType(MediaType.APPLICATION_JSON)) //接收的数据类型
.andExpect(status().isOk()) //添加执行完成后的断句,请求的状态响应码//是否为200,如果不是则测试不通过
.andDo(print()); //添加一个结果处理程序,表示要对结果进行处理,比如此处//使用print()输出整个响应结果信息
}
}
在上面的示例中,通过使用MockMvc构造一个post请求,MockMvcRequestBuilders可以支持post和get请求,调用print()方法将请求和相应的过程都打印出来。示例代码说明如下:
- MockMvcRequestBuilders.post("/hello"):构造一个post请求。
- contentType (MediaType.APPLICATION_JSON)):设置JSON返回编码,避免出现中文乱码的问题。
- andExpect(status().isOk()):执行完成后的断句,请求的状态响应码是否为200,如果不是则测试不通过。
- andDo(print()):添加一个结果处理程序,表示要对结果进行处理,比如此处调用print()输出整个响应结果信息。
步骤02 执行单元测试。
完成测试方法之后,执行测试方法:将鼠标放在对应的方法上,右击并选择Run执行该方法即可。可以看到输出如下:
MockHttpServletRequest:
HTTP Method = POST
Request URI = /hello
Parameters = {}
Headers = [Content-Type:"application/json;charset=UTF-8"]
Body = null
Session Attrs = {}
Handler:
Type = cn.xueden.helloworld.controller.HelloController
Method = cn.xueden.helloworld.controller.HelloController#hello()
Async:
Async started = false
Async result = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
Attributes = null
MockHttpServletResponse:
Status = 200
Error message = null
Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"17"]
Content type = text/plain;charset=UTF-8
Body = Hello String Boot
Forwarded URL = null
Redirected URL = null
Cookies = []
从上面的输出中可以看到,返回完整的Http Response,包括Status=200、Body = hello Spring Boot,说明接口请求成功并成功返回。
如果接口有登录验证,则需要通过MockHttpSession注入用户登录信息,或者修改登录拦截器取消对单元测试的登录验证。
2.2.4 常用的单元测试注解
在实际项目中,除了@SpringBootTest、@Test等注解之外,单元测试还有很多非常实用的注解,具体说明如表2-1所示。
注释 | 说明 |
---|---|
@RunWith(SpringRunner.class) | 声明测试运行在Spring环境。SpringRunner是SpringJUnit4ClassRunner的新名字,这样做仅仅是为了让名字看起来更简单一点 |
@SpringBootTest | 用于Spring Boot应用测试,它默认会根据包名逐级往上找,一直找到Spring Boot主程序,通过类注解是否包含@SpringBootApplication来判断是否为主程序,并在测试时启动该类来创建Spring 上下文环境 |
@BeforeClass | 用来静态修饰方法,该方法会在所有测试方法执行之前执行一次 |
@BeforeEach | 用来修饰方法,该方法会在每一个测试方法执行之前执行一次 |
@Test | 测试方法,在这里可以测试期望异常和超时时间 |
@AfterEach | 用来修饰方法,该方法会在每一个测试方法执行之后执行一次 |
@AfterClass | 用来静态修饰方法,该方法会在所有测试方法执行之后执行一次 |
@Ignore | 忽略的测试方法 |
2.4 开发环境热部署
本节介绍Spring Boot非常实用的功能:开发环境热部署。在实际的项目开发调试过程中会频繁地修改后台类文件,导致需要重新编译、重新启动,整个过程非常麻烦,影响开发效率。下面介绍Spring Boot如何解决这个问题。
2.4.1 devtools实现原理
我们在开发调试Spring Boot项目时,需要经历重新编译、重新启动程序的过程。由于系统启动时,需要加载一系列的组件和依赖包,因此整个过程非常耗时,大大影响开发效率。
Spring Boot在这方面做了很好的支持,提供了spring-boot-devtools组件,使得无须手动重启Spring Boot应用即可重新编译、启动项目,大大缩短编译、启动的时间,从而提高开发效率。
spring-boot-devtools的核心是两个类加载器(ClassLoader):一个是Base类加载器(Base ClassLoader),负责加载那些不会改变的类,如第三方JAR包等;另一个是Restart类加载器(Restart ClassLoader),负责加载那些正在开发的会改变的类。这样如果只修改Java代码,devtools只会重新加载被修改的类文件,不会重新加载其他第三方的JAR包,所以重启较快,从而达到热部署的效果。
我们在项目中引入devtools组件之后,devtools会监听classpath下的文件变动,当文件被修改时会重新编译,重新生成类文件;devtools监听到类文件变动,触发Restart类加载器重新加载该类,从而实现类文件和属性文件的热部署。
需要注意的是,并不是所有的更改都需要重启应用(如静态资源、视图模板)。我们可以通过设置spring.devtools.restart.exclude属性来指定一些文件或目录的修改不用重启应用。例如,可以设置/static和/public下的所有文件更新都不触发应用重启。
2.4.2 配置开发环境热部署
步骤01 在pom.xml配置文件中添加dev-tools依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
在上面的示例中,使用 英 [ˈɒpʃənl] 美 [ˈɑːpʃənl] optional=true表示依赖不会传递,即该项目依赖devtools;其他项目如果引入此项目生成的JAR包,则不会包含devtools,如果想要使用devtools,则需要重新引入。
步骤02 在application.properties中配置devtools。
# 热部署生效
spring.devtools.restart.enabled=true
# 设置重启的目录
spring.devtools.restart.additional-paths=src/main/java
# classpath目录下的WEB-INF文件夹内容修改不重启
spring.devtools.restart.exclude=WEB-INF/**
上面的配置主要是打开devtools热部署,然后指定监控的后台文件目录,最后指明文件变更不需要重新编译部署的目录。配置完成之后,devtools会监听classpath下的文件变动,并且会立即重启应用。
需要注意的是,devtools也可以实现前台页面热部署,即页面修改后会立即生效,需要在application.properties文件中配置spring.thymeleaf.cache=false,以指定不缓存前端页面。
步骤03 验证配置是否生效。
配置完成后,需要验证热部署是否生效。首先启动项目,修改项目中的某个java文件,然后在IDEA后台可以看到devtools自动重启应用,后台日志输出如图2-15所示。
我们手动修改java后台代码就会发现Spring Boot已经重新编译该文件,然后自动重新加载,无须手动重启。
2.4.3 使用JRebel插件实现热部署
JRebel是一套JavaEE开发工具, 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。 它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。
步骤01 安装插件
打开IDEA编辑器依次选择File→Settings→Plugins,在搜索框输入jrebel,如图2-16所示。
步骤02 在线生成GUID
打开浏览器输入地址:https://www.guidgen.com/,如图2-17所示.
如果失效刷新GUID替换就可以!
步骤03 打开jrebel 面板,选择Connect to online licensing service,如图2-18所示。
安装成功之后就可以通过JRebel启动项目。这样修改完Java代码后,就可以通过快捷键 Ctrl+shift+F9 而不再需要重启站点这样繁琐浪费时间的操作了。
步骤04 设置成离线工作模式
打开IDEA编辑器依次选择File→Settings→JRebel&XRebel,点击"Work offine",点击之后出现如图2-19所示效果。
步骤05 设置自动编译
要想实现热部署,首先需要对Intellij按如下进行设置:
1) 由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效。 如图2-20所示。
2)打开运行时编译,设置compiler.automake.allow.when.app.running
按快捷键 Ctrl+Shift+Alt+/ ,选择 Registry ,如图2-21和图2-22所示。
步骤06 使用 运行项目时要点击图中红框中的按钮,即可运行,如图2-23所示。
第一个按钮是Run,第二个按钮是Debug。
修改代码后,按快捷键 Ctrl + Shift + F9,运行后会提示有变化是否重新加载,选yes。完成加载以后,就已经实现了热更新效果。