java - 为什么我的 Spring webflux 应用程序在每个请求上都会生成临时文件?

标签 java spring nio spring-webflux bytebuffer

为什么spring webflux(或java nio)制作multipartData DataBuffer tmp文件?

就我在 macOS 上的情况而言,文件类似于 /private/var/folders/v6/vtrxqpbd4lb3pq8v_sbm10hc0000gn/T/nio-file-upload/nio-body-1-82f11dbe-61b3-4e5d-8c43-92e02aa38481.tmp 根据要求制作,然后删除。

是否可以通过阻止磁盘写入来提高性能?

这是我的代码:

public class FileHandler {
    public Mono<ServerResponse> postFile(ServerRequest req) {
        val file = req.multipartData()
                .map(map -> map.getFirst("file"))
                .ofType(FilePart.class);
        val buffer = file.flatMap(part -> part.content().next());
        val hash = buffer.map(d -> {
            try {
                val md = MessageDigest.getInstance("SHA-1");
                md.update(d.asByteBuffer());
                return Base64Utils.encodeToString(md.digest());
            } catch (NoSuchAlgorithmException e) {
                // does not reach here!
                return "";
            }
        });
        val name = file.map(FilePart::filename);
        return ok().body(hash, String.class);
    }
}

最佳答案

multipart file support in Spring WebFlux is using the Synchronoss NIO Multipart library 。该实现的缺点是它不是完全响应式的,因此它可以创建临时文件以不将整个内容加载到内存中。

是什么让您认为这种行为是性能问题?您是否有样本或基准测试结果表明这是一个问题?

Spring 框架团队已经致力于此工作,并且 Spring Framework 5.2 中将提供完全响应式实现作为默认设置(请参阅 spring-framework#21659 )。

关于java - 为什么我的 Spring webflux 应用程序在每个请求上都会生成临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522642/

相关文章:

Java 8 : Iterate and group objects from list based on object attributes

java - 如何用java将一个列表减少到另一个列表

java - 如何通过读取文件并将其写入另一个文件来为我的类(class)编写单元测试?

spring - 动态添加实体到 hibernate

java - Java中的多线程文件读取

java - 使用 Getter Setter JAVA 访问其他类的变量

Java IE 提供旧的 HTTP Servlet session 对象

mysql - 运行 spring boot jar 文件时出错(创建名称为 'dataSource' 的 bean 时出错)

java - netty select() 怎么会花这么多时间?

java - NIO 套接字 - 分布式系统