@ConditionalOnExpression(如果存在属性)

时间:2019-03-25 02:46:20

标签: java spring spring-boot

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

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

如何使用@ConditionalOnExpression使得application.yml中仅存在令牌就足够了?

我尝试了@ConditionalOnProperty("tokens")@CondtionalOnProperty(prefix="tokens", value= {"token"}。这是行不通的。甚至官方文档也建议使用列表/数组将无法正常工作。

2 个答案:

答案 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;
   ...
}