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

如何在Spring Boot配置文件中忽略表达式校验?

Spring Boot配置含SpEL格式字符启动失败的解决方法

问题场景

某Spring Boot项目因配置项包含特殊格式字符无法启动,相关信息如下:

配置文件 myconfig.properties

password=3#{xxxx|xxxx)?4/xxxxxxx+ABC1}

错误日志

Caused by: org.springframework.expression.ParseException: Expression [3#{xxxx|xxxx)?4/xxxxxxx+ABC1}] @12: Found closing ')' at position 12 without an opening '('
    at org.springframework.expression.common.TemplateAwareExpressionParser.skipToCorrectEndSuffix(TemplateAwareExpressionParser.java:194) ~[spring-expression-6.1.4.jar:6.1.4]
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions(TemplateAwareExpressionParser.java:107) ~[spring-expression-6.1.4.jar:6.1.4]
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate(TemplateAwareExpressionParser.java:66) ~[spring-expression-6.1.4.jar:6.1.4]
    at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:52) ~[spring-expression-6.1.4.jar:6.1.4]
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:164) ~[spring-context-6.1.4.jar:6.1.4]
    at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1605) ~[spring-beans-6.1.4.jar:6.1.4]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1377) ~[spring-beans-6.1.4.jar:6.1.4]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) ~[spring-beans-6.1.4.jar:6.1.4]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:784) ~[spring-beans-6.1.4.jar:6.1.4]

问题:如何忽略表达式校验以避免启动失败?

解决方法

Spring Boot默认会将#{...}识别为SpEL表达式解析,配置中的字符恰好匹配该格式,导致解析报错。以下是三种可行方案:

  • 转义SpEL标识:在配置文件中给#{前添加反斜杠转义,让Spring按普通字符串处理:

    password=3\#{xxxx|xxxx)?4/xxxxxxx+ABC1}
    
  • 全局关闭SpEL解析:如果项目不需要使用SpEL功能,可通过配置类禁用表达式解析器:

    import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class DisableSpELConfig {
        @Bean
        public BeanFactoryPostProcessor disableSpELBeanFactoryPostProcessor() {
            return (ConfigurableListableBeanFactory beanFactory) -> {
                beanFactory.setBeanExpressionResolver(null);
            };
        }
    }
    

    此方式会完全关闭全局的Bean表达式解析,适合无SpEL需求的场景。

  • 单个属性原始注入:若仅针对该属性处理,可在@Value中用单引号包裹属性值,并配合#{null}前缀强制按原始字符串注入:

    @Value("#{null + '3#{xxxx|xxxx)?4/xxxxxxx+ABC1}'}")
    private String password;
    

    该方式仅影响当前属性,不会干扰全局SpEL功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:35:06