我有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)
引自qazxsw poi:
必须匹配的单个条件才能注册组件。在bean定义到期之前立即检查条件,并且可以根据此时可以确定的任何标准自由否决注册。
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。
@Faraz Durrani试试这个概念你会得到......
en.getProperty