springboot文件上传500,重启服务正常

最近生产环境发现一个问题,后台管理系统有一个上传文件保存数据库的功能,每隔一段时间就会出现上传失败,重启服务就可以正常上传。

分析问题:由于服务在启动时会在服务器的/tmp目录下生成tomcat.827296577384433988.8005(work/Tomcat/localhost/ROOT)和tomcat-docbase.546140289861349437.8005这样两个文件夹,对于Multipart(form-data)的方式处理请求时,默认就是在tomcat-docbase目录下创建临时文件的,而centos服务器会定期的清理/tmp这个目录,导致上传时找不到目录而报错上传失败。

解决问题:

方式一、修改服务器配置不删除tmp目录下的tomcat(不推荐)

  1. 在/usr/lib/tmpfiles.d/tmp.conf配置文件中增加如下代码
    x /tmp/tomcat.*
    x /tmp/tomcat-docbase*

     

  2. 重启服务systemctl restart systemd-tmpfiles-clean

方式二、通过服务修改(2和3选一个即可)

  1. 在application.properties中增加server.tomcat.basedir=/app/xxxx/tmp配置
  2. 启动参数加-Djava.io.tmpdir=/app/xxx/tmp
  3. 在服务启动类中增加如下代码
        @Bean
        public MultipartConfigElement multipartConfigElement() {
            MultipartConfigFactory multipartConfigFactory = new MultipartConfigFactory();
            String location = System.getProperty("user.dir") + "/data/tmp";
            File file = new File(location);
            if (!file.exists()) {
                file.mkdirs();
            }
            multipartConfigFactory.setLocation(location);
            return multipartConfigFactory.createMultipartConfig();
        }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值