spring Boot 上传文件,10天后,不能上传的bug
起因
公司研发人员 部署服务在阿里云 ecs 服务器; 上传文件过1周左右文件自动丢失;
排查思路:
(1).查询tomcat 启动日志出现如下信息:
java.io.IOException: The temporary upload location [/tmp/tomcat.1593253653386650830.8220/work/Tomcat/localhost/ROOT] is not valid
(2).这个目录在Linux系统中默认建在/tmp目录下, 10天就会被清除, 引发上述异常.
(3).man systemd-tmpfiles

(3).由此可确定服务为凶手;就是说/tmp 目录下除了下面排除的文件,都给删了。擦~
系统环境:
Centos-7.2
内核版本:
2.6.32-696.3.2.el6.x86_64
容器:
Tomcat 8.5.15.tar.gz
2.tomcat 服务层解决办法;
JVM_OPTIONS="-Xrs -Xms256m -Xmx512m -Djava.io.tmpdir=/data/app/upload" ####tomcat bin catalina.sh 文件修改##
3.程序框架解决办法:
框架配置文件新增: application.properties ####sprint-boot 框架配置文件#######
server.tomcat.basedir=/data/app/upload
4.系统解决方案;
解决方案在 /usr/lib/tmpfiles.d/ 新建文件把指定目录添加上并规定不让被清除
root@~:# vi /usr/lib/tmpfiles.d/tomcat.conf
d /tmp/tomcat* 0755 root root -
d /tmp/upload 0755 root root - ##tomcat 程序上传目录文件
OK,重启 systemctl restart systemd-tmpfiles-clean 服务;
----------------------------------------------------------------------------------------
线上的系统中不能上传文件了,出现如下错误:
org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request;nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] is not valid org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipartHttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.
1
原因:
在linux系统中,springboot应用服务再启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。
解决办法:
在 yml配置文件 中添加:
server.tomcat.basedir: /data/apps/temp
1
手动的将临时文件夹设置为自定义的文件夹,就不会被Linux删除了。
ps:在windows系统中可以生效,系统会自动生成/data/apps/temp这一路径,但是在Linux系统中不会生成/data/apps/temp路径。tell me why?…
spring Boot 上传文件,10天后,不能上传的bug的更多相关文章
- 一般处理程序上传文件(html表单上传、aspx页面上传)
html 表单上传文件 一般处理程序由于没有 apsx 页面的整个模型和控件的创建周期,而比较有效率.这里写一个用 html 表单进行文件上传的示例. 1. 表单元素选用 ...
- spring cloud spring boot JPA 克隆对象修改属性后 无法正常的执行save方法进行保存或者更新
2019-12-1220:34:58 spring cloud spring boot JPA 克隆对象修改属性后 无法正常的执行save方法进行保存或者更新 未解决
- Spring Boot 嵌入式 Tomcat 文件上传、url 映射虚拟路径
1.Java web 应用开发完成后如果是导入外置的 Tomcat 的 webapps 目录的话,那么上传的文件可以直接的放在应用的 web 目录下去就好了,浏览器可以很方便的进行访问. 2.Spri ...
- spring boot:实现图片文件上传并生成缩略图(spring boot 2.3.1)
一,为什么要给图片生成缩略图? 1, 用户上传的原始图片如果太大,不能直接展示在网站页面上, 因为不但流费server的流量,而且用户打开时非常费时间, 所以要生成缩略图. 2,服务端管理图片要注意的 ...
- Spring Boot入门——多文件上传大小超限问题解决
多文件上传中遇到上传文件大小的问题 org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededExcepti ...
- Spring Boot + thymeleaf 实现文件上传下载
参考博客:https://juejin.im/post/5a326dcaf265da431048685e 技术选型:spring boot 2.1.1+thymeleaf+maven 码云地址:htt ...
- # 曹工说Spring Boot源码(10)-- Spring解析xml文件,到底从中得到了什么(context:annotation-config 解析)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- spring boot 2.x文件路径映射问题汇总
当我们在运行可执行的java jar包的时候,我们肯定改变不了jar里面的内容,因此文件上传路径就成了我们必须考虑的一点问题,我们不能往直接这个jar包里面写文件,那么只能写在jar包外面,但是写到j ...
- Spring Boot 系列教程9-swagger-前后端分离后的标准
前后端分离的必要 现在的趋势发展,需要把前后端开发和部署做到真正的分离 做前端的谁也不想用Maven或者Gradle作为构建工具 做后端的谁也不想要用Grunt或者Gulp作为构建工具 前后端需要通过 ...
- Spring Boot 学习系列(10)—SpringBoot+JSP的使
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 解决问题 随着spring boot 框架的逐步使用,我们期望对于一些已有的系统进行改造,做成通用的脚手架, ...
随机推荐
- RPM安装MYSQL5.7
RPM安装MYSQL5.7 1:YUM安装依赖库 yum install perl libaio numactl 2:下载安装需要的RPM包 https://dev.mysql.com/get/Dow ...
- VMware上centos系统忘记账号和密码解决
转载: https://blog.csdn.net/wyx_wyl/article/details/78246907 我们有时会忘记虚拟机上的登陆密码,今天来说一下怎样修改我们的密码.应该对大多数的l ...
- [UE4]用Blenspace混合空间动画代替AimOffset动画偏移
- Sharing Configuration in ASP.NET Core SPA Scenarios
https://blogs.msdn.microsoft.com/webdev/2017/10/27/sharing-configuration-in-asp-net-core-spa-scenari ...
- Java调用R语言
R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/ ...
- object视频播放
param name标签是在这个播放插件中嵌入的一些功能和播放参数: <param name="playcount" value="1"><! ...
- jms和activemq简介
一.JMS简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消 ...
- Android短信收发(二)
接收SMS类,代码如下 //for receive SMS private SmsReceiver mSmsReceiver; @Override protected void onResume() ...
- CentOS7 安装 hbase1.3.3
1. 集群规划 ip地址 机器名 角色 192.168.1.101 palo101 hadoop namenode, hadoop datanode, yarn nodeManager, zookee ...
- C# webbrowser遍历网页元素
//不引用其他单元 foreach(HtmlElement ele in WB1.Document.All) { if(ele.I ...