求助:在application.properties中通过SpEL实现属性条件赋值失败
解决Spring Boot application.properties中根据环境变量动态设置属性值的问题
我明白你遇到的问题了——原来的配置之所以失效,核心原因是**${SOME_VAR:#{null}}这种写法并没有把myVar真正设置为null**:当环境变量SOME_VAR不存在时,这个占位符会被替换成字符串"#{null}",而不是null对象,导致后续的SpEL判断myVar != null永远为true,逻辑完全走偏了。
下面给你两种可行的解决方案,按需选择:
方案一:直接在result中通过SpEL判断环境变量
不需要中间变量myVar,直接用Spring提供的environment对象读取环境变量并判断:
result=myVar is #{@environment.getProperty('SOME_VAR') != null && !@environment.getProperty('SOME_VAR').trim().isEmpty() ? '' : 'not'} populated
@environment是Spring容器中管理的Environment实例,可以直接获取环境变量、配置属性等- 这里额外加了
trim()是为了处理环境变量为空字符串的情况(比如SOME_VAR=这种场景),如果不需要可以去掉
方案二:正确定义中间变量myVar后再判断
如果需要复用myVar的逻辑,可以先通过SpEL把myVar设置为真正的null(当环境变量不存在/为空时):
# 通过systemEnvironment直接获取环境变量,不存在则返回null myVar=#{systemEnvironment.get('SOME_VAR') ?: null} # 此时myVar是真正的null对象,判断逻辑正常生效 result=myVar is #{myVar != null && !myVar.isEmpty() ? '' : 'not'} populated
systemEnvironment是SpEL内置的对象,专门用于访问系统环境变量?:是Elvis运算符,等价于if-else:如果左边的值为null或空,就返回右边的null
两种方案都能实现你的需求,方案一更简洁,方案二更适合需要多次复用myVar逻辑的场景。
内容的提问来源于stack exchange,提问作者Maxime Laval
相关产品推荐
相关产品推荐

