java - @ConditionalOnExpression 如果属性存在
问题描述
我有 application.yml 有一个属性,它需要一个像这样的数组/列表
tokens:
token:
- name: one
site: chicago
token:
- name: two
site: 'st. louis'
我如何使用@ConditionalOnExpression
这样的方式,仅在 application.yml 中存在令牌就足够了?
我试过@ConditionalOnProperty("tokens")
和@CondtionalOnProperty(prefix="tokens", value= {"token"}
. 这没用。甚至官方文档也建议使用列表/数组它不会很好。
解决方案
您可以使用@Conditional(YourCondition.class)
引用文档:
为了注册组件而必须匹配的单个条件。在 bean 定义即将注册之前立即检查条件,并且可以根据当时可以确定的任何标准自由否决注册。
插图:
@Conditional(MyCondition.class)
@Controller
public class Box{
...
}
public class MyCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
Environment env = context.getEnvironment();
return null == env.getProperty("tokens.token[0].name");
}
}
在这里,en.getProperty
如果缺少属性,将返回 null。
推荐阅读
- google-app-engine - java.lang.RuntimeException:暂存包时出错
- mysql - “显示引擎 innodb 状态”中的过时死锁信息
- asp.net-mvc - 如何获取 AppSettings 作为常量值?
- javascript - Javascript - 未找到导入
- ruby - 如果在没有 shell 的情况下运行,Ruby 会以退出代码 1 响应 TERM 退出
- javascript - VSCode - 保存时 JavaScript 文件的奇怪语法格式
- c# - Visual Studio C# 观察变量表示
- javascript - 使用浏览器控制台 (Chrome) 将表格数据从 HTML 页面导出到 CSV 文件
- node.js - NodeJs 护照验证
- postgresql - 具有已删除属性的历史表的累积计数