最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot出現(xiàn)DataBufferLimitException: Exceeded limit on max bytes to buffer:262144問題及解決

 更新時(shí)間:2026年04月28日 10:18:22   作者:我真的不吃辣條  
在Shenyu網(wǎng)關(guān)中,上傳大文件時(shí)遇到`DataBufferLimitException`異常,問題在于Spring Boot 2版本中`max-in-memory-size`配置無效,通過創(chuàng)建同名類并修改`maxInMemorySize`值來解決問題,此方法利用Spring同名Bean覆蓋機(jī)制,確保自定義類優(yōu)先被加載

問題場景

spring boot 版本:2.2.2

應(yīng)用網(wǎng)關(guān):shenyu網(wǎng)關(guān)(soul網(wǎng)關(guān))

錯(cuò)誤描述

在一次項(xiàng)目中,我在上傳文件時(shí)被網(wǎng)關(guān)攔截出現(xiàn)了這個(gè)問題:

DataBufferLimitException: Exceeded limit on max bytes to buffer :262144

發(fā)現(xiàn)只能上傳256KB以下的文件,但現(xiàn)在文件隨便就是10M或者更大。

具體錯(cuò)誤如下:

org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
    at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:101)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Stack trace:
        at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:101)
        at org.springframework.core.io.buffer.LimitedDataBufferList.updateCount(LimitedDataBufferList.java:94)
        at 

解決方案

方案一(對我不生效)

一般來說直接設(shè)置  max-in-memory-size 就可以生效

spring:
  codec:
    max-in-memory-size: 100MB

但是以上代碼在spring2.x.x版本中不生效,官方說解決了,估計(jì)是在后面版本解決了,但是項(xiàng)目都上生產(chǎn)了肯定不可能現(xiàn)在來換版本,所以只有另想辦法,在他啟動(dòng)中debug發(fā)現(xiàn)在初始化代碼時(shí)已經(jīng)設(shè)置為262144了:

方案二(有效)

于是繼續(xù)往上發(fā)現(xiàn)在 org.springframework.core.codec.AbstractDataBufferDecoder中進(jìn)行初始化的,于是誕生了寫一個(gè)同名類來給他初始化,利用Spring中同名Bean相互覆蓋的特性,在我們注入了同名bean就會(huì)優(yōu)先使用我們的類。

層級目錄如下:

我們要保證這個(gè)類的包名和spring的名稱一模一樣,具體代碼不變,只需修改maxInMemorySize 大小,如下所示:

package org.springframework.core.codec;

import java.util.Map;
import org.reactivestreams.Publisher;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.lang.Nullable;
import org.springframework.util.MimeType;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;


/**
 * @Auther: whhh
 * @Date: 2021/4/7 11:08
 * @Description:  圖片上傳重寫緩存區(qū)大小,解決上傳圖片緩存不夠問題
 */
public abstract class AbstractDataBufferDecoder<T> extends AbstractDecoder<T> {
    //圖片上傳重寫緩存區(qū)大小,解決上傳圖片緩存不夠問題
    private int maxInMemorySize = 1024*1024*100;

    protected AbstractDataBufferDecoder(MimeType... supportedMimeTypes) {
        super(supportedMimeTypes);
    }

    public void setMaxInMemorySize(int byteCount) {
        this.maxInMemorySize = byteCount;
    }

    public int getMaxInMemorySize() {
        return this.maxInMemorySize;
    }

    public Flux<T> decode(Publisher<DataBuffer> input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String, Object> hints) {
        return Flux.from(input).map((buffer) -> {
            return this.decodeDataBuffer(buffer, elementType, mimeType, hints);
        });
    }

    public Mono<T> decodeToMono(Publisher<DataBuffer> input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String, Object> hints) {
        return DataBufferUtils.join(input, this.maxInMemorySize).map((buffer) -> {
            return this.decodeDataBuffer(buffer, elementType, mimeType, hints);
        });
    }

    /** @deprecated */
    @Deprecated
    @Nullable
    protected T decodeDataBuffer(DataBuffer buffer, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String, Object> hints) {
        return this.decode(buffer, elementType, mimeType, hints);
    }
}

重點(diǎn)就是這里,他會(huì)去讀取這個(gè)配置:

到這里我們的問題就解決了,上傳文件就成功了。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java?ResourceBundle讀取properties文件方式

    java?ResourceBundle讀取properties文件方式

    這篇文章主要介紹了java?ResourceBundle讀取properties文件方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Mybatis中的@Param及動(dòng)態(tài)SQL詳解

    Mybatis中的@Param及動(dòng)態(tài)SQL詳解

    這篇文章主要介紹了Mybatis中的@Param及動(dòng)態(tài)SQL詳解,@Param是MyBatis所提供的作為Dao層的注解,作用是用于傳遞參數(shù),從而可以與SQL中的的字段名相對應(yīng),需要的朋友可以參考下
    2023-10-10
  • 詳解MyBatis的動(dòng)態(tài)SQL實(shí)現(xiàn)原理

    詳解MyBatis的動(dòng)態(tài)SQL實(shí)現(xiàn)原理

    MyBatis提供了強(qiáng)大的動(dòng)態(tài)SQL語句生成功能,以應(yīng)對復(fù)雜的業(yè)務(wù)場景,本篇文章將結(jié)合MyBatis解析SQL語句的過程對MyBatis中對<if>,<where>,<foreach>等動(dòng)態(tài)SQL標(biāo)簽的支持進(jìn)行分析,需要的朋友可以參考下
    2023-07-07
  • Jackson多態(tài)序列化圖文詳解

    Jackson多態(tài)序列化圖文詳解

    jackson允許配置多態(tài)類型處理,當(dāng)進(jìn)行反序列話時(shí),JSON數(shù)據(jù)匹配的對象可能有多個(gè)子類型,為了正確的讀取對象的類型,我們需要添加一些類型信息,下面這篇文章主要給大家介紹了關(guān)于Jackson多態(tài)序列化的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 為什么wait和notify必須放在synchronized中使用

    為什么wait和notify必須放在synchronized中使用

    這篇文章主要介紹了為什么wait和notify必須放在synchronized中使用,文章圍繞主題的相關(guān)問題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考以參考一下
    2022-05-05
  • 面試必時(shí)必問的JVM 類加載機(jī)制詳解

    面試必時(shí)必問的JVM 類加載機(jī)制詳解

    這篇文章主要介紹了一文讀懂Jvm類加載機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • java正則替換括號中的逗號實(shí)現(xiàn)示例

    java正則替換括號中的逗號實(shí)現(xiàn)示例

    本文主要介紹了java正則替換括號中的逗號實(shí)現(xiàn)示例,主要介紹了兩種示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Java中ArrayList的removeAll方法詳解

    Java中ArrayList的removeAll方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList的removeAll方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來看看吧。
    2017-07-07
  • 反射獲取java對象的幾種方式

    反射獲取java對象的幾種方式

    本文詳細(xì)介紹了如何通過反射在Java中獲取Class對象,使用不同構(gòu)造器創(chuàng)建對象,以及Spring框架中的對象獲取方法,包括構(gòu)造器配置和setter注入,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2026-05-05
  • java基本教程之java線程等待與java喚醒線程 java多線程教程

    java基本教程之java線程等待與java喚醒線程 java多線程教程

    這篇文章主要介紹了對線程等待/喚醒方法,文中使用了多個(gè)示例,大家參考使用吧
    2014-01-01

最新評論

吴江市| 东平县| 长沙县| 济阳县| 库车县| 英山县| 吉首市| 武川县| 广丰县| 岳阳县| 河东区| 阿图什市| 葵青区| 永丰县| 商丘市| 苗栗市| 饶河县| 钦州市| 泰来县| 永州市| 南部县| 墨脱县| 阿合奇县| 沐川县| 丹江口市| 收藏| 忻州市| 吉木乃县| 平安县| 盐池县| 海晏县| 黔江区| 聊城市| 贡嘎县| 泗水县| 铁岭市| 雷波县| 浮山县| 许昌县| 巴中市| 修水县|