@ConditionalOnExpression如果属性存在

问题描述 投票:1回答:2

我有application.yml有一个属性,它需要像这样的数组/列表

tokens:
  token: 
    -  name: one
       site: chicago
  token:
    - name: two
      site: 'st. louis'

我如何使用@ConditionalOnExpression,只需在application.yml中存在令牌即可?

我试过@ConditionalOnProperty("tokens")@CondtionalOnProperty(prefix="tokens", value= {"token"}。这是行不通的。甚至官方文档都表明,对于列表/数组,它不会很好用。

java spring spring-boot
2个回答
0
投票

你可以使用@Conditional(YourCondition.class)

引自qazxsw poi:

必须匹配的单个条件才能注册组件。在bean定义到期之前立即检查条件,并且可以根据此时可以确定的任何标准自由否决注册。

Illustration:

docs

在这里,@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"); } } 将在缺少属性的情况下返回null。


-1
投票

@Faraz Durrani试试这个概念你会得到......

en.getProperty
© www.soinside.com 2019 - 2024. All rights reserved.