maven配置
<!-- SpringBoot Web容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除tomcat -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- undertow 容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
pom.xml只需如上设置就能去除SpringBoot内置的Tomcat,改为Undertow容器
踩坑记录
1、file.transferTo()方法失效
报错:
java.nio.file.FileAlreadyExistsException:C:\data\crm\uploadPath\upload\2023\02\02\c9bcccaa-ec94-423b-8609-499033049cc0.pdf
解决方法:
// file.transferTo(desc);
FileUtils.copyInputStreamToFile(file.getInputStream(), desc);
2、上传文件会出现临时文件目录不存在的错误
报错:
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.RuntimeException: java.nio.file.NoSuchFileException: C:\Users\ADMINI~1\AppData\Local\Temp\undertow.8107.8986308911172817130\undertow662609047623901049upload
原因:是由于临时 /tmp 目录下的文件,在长时间(10天)没有使用的情况下,系统执行了 tmp 目录清理服务,导致 /tmp/undertow.8107文件被清理,然而在上传的时候,undertow 服务器需要创建/tmp/undertow.8107/undertow…upload 临时文件,但是调用 Files.createFile(…) 的时候就会发现找不到父目录,才导致了以上的错误。
解决方法:
-Djava.io.tmpdir=/your/temp/path/
启动jar的命令中添加以上启动参数即可
参考:http://t.csdnimg.cn/t6Rjj