@ConditionalOnExpression复杂逻辑怎么写

轻墨姑娘_6254

轻墨姑娘_6254

2026-08-07

291人浏览

原创

@ConditionalOnExpression多条件判断需用单行SpEL字符串,外层单引号、内层双引号;禁用三元链式写法;嵌套结构须防null(用?.安全调用);数值需显式类型转换;复合条件用括号明确优先级。

@conditionalonexpression复杂逻辑怎么写

在Spring Boot中用@ConditionalOnExpression实现多条件组合判断时,必须把SpEL表达式写成单行字符串,括号嵌套层级超过三层就容易因空格或引号缺失导致启动失败。

基础语法结构

用单引号包裹整个表达式,内部字符串再用双引号,比如@ConditionalOnExpression("'${app.env}' == 'prod' and ${server.port} == 8080"。

SpEL不支持三元运算符的链式写法,【写成 '${app.mode} == "dev" ? true : ${app.mode} == "test" ? true : false' 会抛出ParseException】。

布尔值直接写true/false,不要加引号;字符串必须用双引号,且双引号必须在单引号包裹的表达式内部。

嵌套Map和List取值

方法一:从Environment获取带层级的配置项

@ConditionalOnExpression("#{environment.getProperty('feature.flags', '').contains('auth') and environment.getProperty('feature.timeout', '30').toInteger() > 15}")

方法二:解析YAML中的嵌套结构(需配合@ConfigurationProperties)

Presale One-pass Orchestrator
Presale One-pass Orchestrator

一款AI工具,主要用于运行或监督单遍 Codex 实现,包含预检门控、分步计划执行及严格的 QA 缺陷闭环。适用于执行已批准的售前...,适合需要提升相关任务效率的用户。

下载

先定义配置类:@ConfigurationProperties(prefix = "app") public class AppConfig { private Map features; },再在条件中用@ConditionalOnExpression("#{appConfig.features.containsKey('payment') and appConfig.features['payment'].enabled == true}")。

注意:如果features是null,.containsKey会抛NullPointerException,【务必在表达式开头加安全调用:#{appConfig?.features?.containsKey('payment') && ...}】。

组合多个配置项的复合判断

第一步:提取公共子表达式避免重复计算

第二步:用and/or连接主逻辑,优先级靠括号明确限定

第三步:对数值型配置强制类型转换,比如${app.retry.max} != null and ${app.retry.max}.toInteger() >= 3

完整示例:@ConditionalOnExpression("${app.enabled:true} and ('${app.region}' matches 'CN|US') and (${app.version} != null and ${app.version}.toInteger() >= 2) and #{systemProperties['os.name'].toLowerCase().contains('linux')}")

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

2026.02.10

781

17

Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

2026.02.10

781

17

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

2026.11.03

0

10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

2026.11.02

20

14

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

2026.11.02

20

17

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

2026.11.02

20

17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习