You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3.3.0中如何提升SpEL表达式最大长度?

解决Spring Boot 3.3.0中SpEL表达式长度超限问题

一、通过配置属性直接调整阈值

Spring Boot 3.3.0(依赖Spring Framework 6.1)新增了SpEL表达式长度限制的配置项,可直接在配置文件中修改阈值:

application.properties配置:

spring.spel.expression.max-length=20000 # 根据实际需求设置更大数值

application.yml配置:

spring:
  spel:
    expression:
      max-length: 20000

二、自定义SpelParserConfiguration实现精细控制

如果需要更灵活的配置(比如同时调整其他SpEL解析参数),可以通过自定义Bean覆盖默认配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.expression.spel.SpelParserConfiguration;

@Configuration
public class SpelConfig {
    @Bean
    public SpelParserConfiguration spelParserConfiguration() {
        // 第一个参数:是否允许模板模式(默认true);第二个参数:最大表达式长度
        return new SpelParserConfiguration(true, 30000);
    }
}

三、优化配置绑定方式(推荐)

如果你的场景是绑定大Map,更优雅的方式是使用@ConfigurationProperties替代SpEL解析,从根源避免长度限制问题:

  1. 创建配置属性类:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "mySpringBoot")
public class MyProperties {
    private Map<String, String> map;

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }
}
  1. 在业务类中注入使用:
import org.springframework.stereotype.Component;
import java.util.Map;

@Component
public class MyClass {
    private final Map<String, String> map;

    // 构造方法注入(推荐)
    public MyClass(MyProperties myProperties) {
        this.map = myProperties.getMap();
    }
}

补充说明

Spring Framework 6.1默认添加SpEL表达式长度限制(阈值10000字符),目的是防止恶意长表达式引发性能问题或安全风险。如果使用上述优化方案,既能规避限制,也能让配置绑定更符合Spring Boot的最佳实践。

内容的提问来源于stack exchange,提问作者MA1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:55:05