SpringBoot热部署(SpringLoader与DevTools)
热部署方式一:SpringLoader
以maven插件方式使用SpringLoader
SpringLoader缺点:只能对java代码生效,对html等页面代码不起作用
注意:这种方式的缺点是SpringLoader热部署程序是在系统后台形式运行。
这个时候需要手动关闭该进程,不然会抛出端口占用的异常
热部署方式二:使用DevTools
使用DevTools工具,作为热部署
SpringLoader与DevTools的区别:
- SpringLoader:在部署项目时使用的热部署方式。
- DevTools:在部署项目时使用的是重新部署的方式。
由于SpringLoader部署有点麻烦,需要在单独启动,单独占用端口,有些麻烦。就只贴出代码就行。不做演示,主要讲解DevTools热部署。
使用DevTools热部署
DevTools只需要加入DevTools依赖项,不需要做别的操作,会自动生效。
java文件修改则自动重启项目,因为重新编译成class文件。
html等页面文件修改则不会自动重启项目,因为不需要重新编译
IDEA中如果加入devtools,但热部署并没有生效,有两个步骤
1.需要在File-/Settings/Build,Execution,Deployent/Compiler/中勾选上Build project automatically选项
2.同时按Shift+Ctrl+Alt+/ 勾选上compiler.automake.allow.when.app.running选项
这样就devtools就会生效了
一:DevTools
pom.xml依赖包
<dependencies>
<!-- springBoot的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- DevTools热部署依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional作用:当其它项目使用该项目是,依赖包加入optional为true,则不会向下传递该依赖包 -->
<!--<optional>true</optional>-->
</dependency>
</dependencies>
application.yml配置文件
spring:
devtools:
restart:
#热部署设置为true:生效,false:失效。默认是true
enabled: true
#选择热部署需要重启的目录
additional-paths: src/main/java
#选择热部署中修改文件内容不修改重启的目录或文件
#exclude: templates/**
thymeleaf:
#页面模板是否缓存,false:不缓存,则热部署对页面生效。true:缓存,则热部署对页面不生效
cache: false
测试页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span th:text="hello...init"></span>
</body>
</html>
Controller
package com.kevin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author kevin
* @version 1.0
* @description 测试热部署
* @createDate 2019/3/20
*/
@Controller
public class UsersController {
@RequestMapping("/show")
public String showPage(){
System.out.println("showPage...init...");
return "index";
}
}
启动类
package com.kevin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author kevin
* @version 1.0
* @description 热部署方式二:使用DevTools
* 使用DevTools工具,作为热部署
* SpringLoader与DevTools的区别:
* SpringLoader:在部署项目时使用的热部署方式。
* DevTools:在部署项目时使用的是重新部署的方式。
*
* DevTools只需要加入DevTools依赖项,不需要做别的操作,会自动生效。
* java文件修改则自动重启项目,因为重新编译成class文件。
* html等页面文件修改则不会自动重启项目,因为不需要重新编译
*
* IDEA中如果加入devtools,但热部署并没有生效,有两个步骤
* 1.需要在File-/Settings/Build,Execution,Deployent/Compiler/中勾选上Build project automatically选项
* 2.同时按Shift+Ctrl+Alt+/ 勾选上compiler.automake.allow.when.app.running选项
* 这样就devtools就会生效了
*
* @createDate 2019/3/20
*/
@SpringBootApplication
public class DevToolsApplication {
public static void main(String[] args) {
SpringApplication.run(DevToolsApplication.class,args);
}
}
测试,仅仅访问
测试修改页面
测试修改后台代码,代码修改就自动重启了程序
二:SpringLoader
pom.xml,springloader插件,以maven插件的形式进行热部署
<dependencies>
<!-- springBoot的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<!-- springloader插件,以maven插件的形式进行热部署-->
<!-- 想要让这个热部署插件生效,需要使用maven的命令启动命令为:mvn spring-boot:run -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
测试页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span th:text="hello...init"></span>
</body>
</html>
Controller
package com.kevin.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author kevin
* @version 1.0
* @description 测试热部署
* @createDate 2019/3/20
*/
@Controller
public class UsersController {
@RequestMapping("/show")
public String showPage(){
System.out.println("showPage...init...");
return "index";
}
}
启动类
package com.kevin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author kevin
* @version 1.0
* @description 热部署方式一:SpringLoader
* 以maven插件方式使用SpringLoader
* SpringLoader缺点:只能对java代码生效,对html等页面代码不起作用
* 注意:这种方式的缺点是SpringLoader热部署程序是在系统后台形式运行。
* 这个时候需要手动关闭该进程,不然会抛出端口占用的异常
* @createDate 2019/3/20
*/
@SpringBootApplication
public class SpringLoaderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringLoaderApplication.class,args);
}
}