Resin热部署之静态资源注意事项: 一不注意就踩雷!
来源:互联网 发布:dm500刷机软件 编辑:程序博客网 时间:2024/06/08 08:25
1、前言
公司有个统计系统,前段时间修改了一个Java文件后,直接将编译后的class文件替换到服务器上,替换完之后,发现统计的数据Double了,即本来有一条数据,统计系统跑出来的结果却是有两条一模一样的数据。
发现问题后,立即查看系统日志,发现日志中没有打印类似Exception、Error等信息,但从日志中能看出,确实是统计任务执行了两遍。
将resin服务器 stop 然后再 start后, 统计程序恢复正常!
2、问题查找
其它问题的排查过程略过。
当其它可能性都排除后,我发现统计系统的任务都放在一个静态list列表中:
private static List<BusinessTaskConfig> tasks = new ArrayList<BusinessTaskConfig>();
再由任务管理分发类,对列表中的任务进行分发执行。会不会是list中任务列表的任务重复了,所以才会执行两遍?想到我就去运行程序试了下,最后发现确实是resin在热部署时,原先的静态资源没有释放,最终造成了会有两份统计任务一起执行的事情发生。
3、代码示例
下边我用一段简单的代码,模拟一下这种情况的发生。
第一步: 启动项目
第二步:稍微修改一下代码,重新编译,此时resin会重新加载项目
第三步:对比第一步图片和第二步图片,发现第一步图片中list存放的时间戳1484301020479在第二步图片中依然存在,并且第二步的图片中又多了一个新的时间戳。
4、结论
这种静态资源不释放的情况,并不一定就会带来问题,但是在一些特殊的情况下(如我们的统计系统,将统计任务放到静态资源中进行管理),就会造成严重的后果。
在这里将问题记录一下,希望能帮助到大家,也希望自己以后能尽量避免这种问题的发生。
对于此统计系统,替换文件时,先将resin stop,替换完后,再start,这样就不会出现问题了。
- Resin热部署之静态资源注意事项: 一不注意就踩雷!
- maven resin 热部署
- idea2017.2 静态资源热部署
- Gradle里配置Jetty实现静态资源的热部署
- idea热部署静态资源无法及时生效
- SpringBoot项目设置热部署以及静态资源livereload
- RESIN 4 配置在MAVEN项目热部署
- IntelliJ IDEA 使用 Resin + JRebel 实现热部署
- Nginx静态资源部署
- linux 部署静态资源
- springBoot03 之热部署
- resin注意事项
- Resin部署
- JVM之热部署与热加载
- 资源文件热部署(远程发布)
- nginx静态资源分离部署
- JVM之-----热部署hotswap
- spring boot之热部署
- 利用 ELK 处理 Percona 审计日志
- 微信小程序之五(创建轮播图)
- dubbo负载均衡模式
- STM32 驱动液晶LCD12864
- linux下phpstorm的安装
- Resin热部署之静态资源注意事项: 一不注意就踩雷!
- CSS3-盒模型基本样式
- 深度学习(四十六)Adversarial Autoencoders学习笔记
- HDU 5768 Lucky7
- 杭电OJ中遇到的坑(不定期更新)
- 可见字符-中英文全半角关系
- 螺旋矩阵
- 蓝桥杯基础练习 十六进制转十进制
- 关于java字符串