前言
在实际开发中,我们使用SpringBoot进行开发的时候,需要频繁启动tomcat服务器,每次修改一次代码就需要重启一次,这使得我们的开发效率收到严重影响。
市面上的热部署插件有很多,下面介绍两种比较常用的热部署插件:
1. 使用maven引入dev-tools依赖
步骤:
第一步:在maven的配置文件pom.xml
中引入dev-tools的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 可选 -->
</dependency>
另外,需要在pom.xml中添加相关插件的支持
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
第二步:打开项目自动构建设置
可以使用Ctrl+Alt+S打开setting
File – > setting – > Build,Execution,Deployment–> Compiler
第三步:勾选compiler.automake.allow.when.app.running
CTRL+shift+Alt+/ 选择 Registry 选中打勾 “compiler.automake.allow.when.app.running
” :
第四步:开启IDEA热部署策略
找到SpringBoot->Running Application Update Policies
第三步:关闭浏览器缓存
network->disabled cache
测试:
- 在Product 类中定义了toStrting()方法,启动tomcat服务器,观察控制台打印的日志
@Component
//prefix绑定到application.yml文件中的product对象,进行属性的注入
@ConfigurationProperties(prefix="product")
@PropertySource({"classpath:application.yaml"})
//JSR303数据校验
@Validated
public class Product {
// 自定义提示信息
@Email(message="邮箱格式有误")
private String myEmail;
/**
* 注意:依赖注入一定要getter和setter
*/
private Double totalPrice;
private String name;
@Override
public String toString() {
return "Product{" +
"myEmail='" + myEmail + '\'' +
", totalPrice=" + totalPrice +
", name='" + name + '\'' +
'}';
}
public String getmyEmail() {
return myEmail;
}
public void setmyEmail(String myEmail) {
this.myEmail = myEmail;
}
public Double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(Double totalPrice) {
this.totalPrice = totalPrice;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
controller类
@Autowired
Product product;
@RequestMapping("/demo1")
public String sayHello1(){
System.out.println(product);
return "demo!!";
}
在浏览器访问controller的url,打印控制台
如果我们要修改Product的代码,无需刷新,因为我们已经启动了热部署
修改Product类的toString()方法
@Override
public String toString() {
return "Product123{" +
"myEmail='" + myEmail + '\'' +
", totalPrice=" + totalPrice +
", name='" + name + '\'' +
'}';
}
在浏览器中访问路径/demo1,对应的控制台打印修改过后的日志信息
注意:使用dev-tools会有以下缺点:
- 在发布项目到生产环境的时候,如果将dev-tools一同打包,会给服务器带来不必要的开销,线上环境不需要dev-tools
- 对于新增的方法或者在新增的方法上进行修改是不生效的,只有在启动项目之前的方法或者代码上修改才生效
- 对于JRebel而言,dev-tools热部署的速度相对慢
一般建议使用JRebel插件,无需打包到线上,并且速度更快
2.JRebel插件
详细的教程请看右边的博客:https://blog.youkuaiyun.com/lianghecai52171314/article/details/105637251
注意IDEA版本问题!