我有一个具有属性的application.yml,它需要一个这样的数组/列表
tokens:
token:
- name: one
site: chicago
token:
- name: two
site: 'st. louis'
如何使用@ConditionalOnExpression
使得application.yml中仅存在令牌就足够了?
我尝试了@ConditionalOnProperty("tokens")
和@CondtionalOnProperty(prefix="tokens", value= {"token"}
。这是行不通的。甚至官方文档也建议使用列表/数组将无法正常工作。
答案 0 :(得分:0)
您可以使用@Conditional(YourCondition.class)
从docs开始:
必须匹配以匹配组件的单个条件 注册。在检查之前立即检查条件 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。
答案 1 :(得分:-1)
@Faraz Durrani尝试这个概念,您会得到...
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "tokens")
public class ServiceClass{
private String token;
...
}