当前位置: 首页 > news >正文

集成热部署

Spring Boot 集成热部署详解

什么是热部署?

热部署(Hot Deployment)是指在应用程序运行过程中,无需重启服务器就能立即应用代码更改的技术。

传统开发 vs 热部署

传统开发热部署
修改代码 → 停止应用 → 重新编译 → 重启 → 测试修改代码 → 保存 → 自动生效 → 测试
每次修改等待 10-30 秒每次修改等待 1-3 秒

Spring Boot 热部署实现方式

方式1:Spring Boot DevTools(推荐)

添加依赖:
<!-- pom.xml -->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>
</dependencies>
配置 IDEA:
  1. Settings → Build, Execution, Deployment → Compiler

    • 勾选 Build project automatically
  2. Registry 设置(重要):

    • Ctrl+Shift+Alt+/(Windows)或 Cmd+Shift+Alt+/(Mac)
    • 选择 Registry
    • 勾选 compiler.automake.allow.when.app.running
配置 application.properties:
# 热部署配置
spring.devtools.restart.enabled=true
spring.devtools.restart.poll-interval=1000
spring.devtools.restart.quiet-period=400# 排除不需要重启的目录
spring.devtools.restart.exclude=static/**,public/**,templates/**# 实时加载(LiveReload)
spring.devtools.livereload.enabled=true
spring.devtools.livereload.port=35729

方式2:JRebel(付费,功能最强)

安装插件:
  1. Plugins → 搜索 JRebel → 安装
  2. 激活(有免费试用)
使用:
  • 点击 JRebel 按钮启动应用
  • 修改代码后自动热部署

方式3:Spring Loaded

添加插件:
<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>

详细配置步骤(使用 DevTools)

步骤1:项目配置

Maven 配置:
<dependencies><!-- Spring Boot DevTools --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>
</dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork>  <!-- 重要:启用分叉 --></configuration></plugin></plugins>
</build>

步骤2:IDEA 配置

自动编译设置:
  1. File → Settings → Build, Execution, Deployment → Compiler
  2. 勾选:
    • Build project automatically
    • Compile independent modules in parallel
运行时编译设置:
  1. Ctrl+Shift+Alt+/
  2. 选择 Registry
  3. 勾选:
    • compiler.automake.allow.when.app.running
    • actionSystem.assertFocusAccessFromEdt

步骤3:应用配置

application-dev.properties:
# 开发环境热部署配置
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=static/**,templates/**,**/*.css# 实时重新加载
spring.devtools.livereload.enabled=true# 远程调试支持
spring.devtools.remote.secret=mysecret# 模板引擎缓存关闭
spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.velocity.cache=false# JPA 相关配置
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update

热部署的工作原理

类加载器机制

应用类加载器 (RestartClassLoader)↓
监控 classpath 变化↓
检测到变化 → 重启应用(快速)↓
新的类加载器加载修改的类

文件监控机制

// DevTools 监控以下目录:
src/main/java     // Java 源代码
src/main/resources // 资源文件
src/test/java     // 测试代码

支持的热部署范围

支持热部署的修改

  • Java 类的方法体修改
  • 静态资源文件(HTML, CSS, JS)
  • 模板文件(Thymeleaf, FreeMarker)
  • 配置文件(application.properties)
  • Spring Bean 的属性和方法

不支持热部署的修改

  • 类结构变更(添加/删除方法、字段)
  • 注解变更
  • 依赖变更(pom.xml 修改)
  • 数据库结构变更
  • Spring 配置类结构变更

实际使用示例

修改 Controller(支持热部署)

@RestController
public class UserController {// 修改方法体 - 支持热部署@GetMapping("/users")public List<User> getUsers() {// 修改这里的逻辑,保存后立即生效return userService.findAllActiveUsers(); // 原来是 findAllUsers()}// 添加新方法 - 不支持热部署,需要重启// @GetMapping("/users/count")// public long getUserCount() {//     return userService.count();// }
}

修改配置文件(支持热部署)

# 修改日志级别 - 支持热部署
logging.level.com.panda.wiki=DEBUG  # 原来是 INFO# 修改服务器端口 - 不支持热部署,需要重启
# server.port=9090  # 需要重启

高级配置技巧

自定义排除目录

# 排除不需要监控的目录
spring.devtools.restart.exclude=static/**,public/**,templates/**,**/*.jar,target/classes/static/**# 添加额外监控目录
spring.devtools.restart.additional-paths=src/main/java,src/main/resources

远程热部署

# 启用远程开发
spring.devtools.remote.secret=mysecret# 远程调试
spring.devtools.remote.debug.enabled=true
spring.devtools.remote.debug.local-port=8000

故障排除

热部署不生效?检查以下几点

  1. 依赖是否正确

    mvn dependency:tree | grep devtools
    
  2. IDEA 配置是否正确

    • 确保 Build project automatically 已开启
    • 确保 Registry 设置正确
  3. 检查日志

    logging.level.org.springframework.boot.devtools=DEBUG
    
  4. 手动触发重启

    • 在 IDEA 中:Build → Recompile (Ctrl+Shift+F9)
    • 或创建 META-INF/spring-devtools.properties 空文件

常见问题解决

# 如果热部署太频繁,增加静默期
spring.devtools.restart.quiet-period=1000
spring.devtools.restart.poll-interval=2000# 如果内存溢出,增加堆内存
spring.devtools.restart.jvm-args=-Xmx1024m

性能优化建议

开发环境配置

# 关闭模板缓存
spring.thymeleaf.cache=false
spring.freemarker.cache=false# 关闭静态资源缓存
spring.resources.cache.period=0# JPA 开发配置
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

总结

热部署最佳实践

  1. 使用 Spring Boot DevTools - 最简单有效
  2. 正确配置 IDEA - 开启自动编译和 Registry 设置
  3. 分环境配置 - 只在开发环境启用热部署
  4. 合理排除目录 - 提高热部署效率
  5. 了解限制 - 知道什么修改需要重启

对于你的 PandaWiki 项目,推荐使用 Spring Boot DevTools,配置简单,效果明显,能极大提升开发效率!

http://www.dtcms.com/a/457795.html

相关文章:

  • 【代码随想录算法训练营——Day28】贪心算法——56.合并区间、738.单调递增的数字、968.监控二叉树
  • 河北建设执业资格注册中心网站响应式网站 软件
  • tuchuang_共享文件_图片_取消_删除
  • 基因组组装:1. Hifiasm 组装参考基因组
  • 网站制作设计专业公司网络营销个人总结
  • 力扣2779. 数组的最大美丽值
  • 深圳做分销网站北京搭建工厂
  • 甘肃省建设厅执业资格注册中心网站通知网站开发三个月能学会吗
  • 石家庄手机网站建设装饰装修网站大全
  • 鼎锋优配股票杠杆交易市场赣锋锂业涨超6%,创两年多新高
  • 网络服务投诉平台商丘seo快速排名
  • 自适应网站欣赏wordpress主题超限
  • TODO 分类任务指标计算和展示 准确率 F1 Recall
  • 网站分辨率做96是否会更好织梦做双语网站
  • 贪心:火烧赤壁
  • 公司网站建设的环境分析城乡建设厅官方网站办事大厅
  • 深度学习基础:从原理到实践——附录A:PyTorch 深度学习框架基础(下)
  • 网站 二级分类品牌创意网站建设徕卡e
  • 做网站设计师庐江网站制作
  • 夫妻分房睡,真的会感情淡吗?分房不是问题,分心才是
  • postgresql_2025Q2单季度财报数据
  • wap网站 html5东莞网站的建设
  • phpmysql网站开发案例企业网址是什么?
  • 机器学习-K-means
  • 如何在网站上做网页链接网页设计基础包括
  • 关联子查询
  • Linux108 shell:.bashrc 正则表达式:. * .* ^ $ ^$ [ ] [^] ^[] ^[^ ] \< \>
  • 怎么在京东做网站上海网站备案查询
  • 关于网站建设的申请报告做网站如何赚流量钱
  • 知识点1-lcd点亮->frame buffer、字库