在@Profile中使用通配符

时间:2017-09-20 09:51:50

标签: java spring spring-boot

如何在@Profile中使用通配符?

例如:

@Profile("*-from-db")
private class Foo {
Foospring.profiles.active结束时,应激活

"-from-db" bean;比如dev-from-db,qa-from-db,prod-from-db等等。

2 个答案:

答案 0 :(得分:1)

仅使用@Profile注释无法做到这一点。您可以尝试使用条件匹配器。 请查看此帖Can I not (!) a collection of spring profiles?和此帖https://raymondhlee.wordpress.com/2015/05/31/using-spring-4-condition-to-control-bean-registration/。 它应该引导你走向正确的方向。

答案 1 :(得分:1)

正如其他人所说,使用@Profile注释是不可能的,只能通过实施自己的Condition来完成。

为此,您需要创建一个注释(例如@ConditionalOnProfileSuffix)并创建Condition的实现(最简单的方法是从SpringBootCondition扩展)。

之后,您必须使用@Conditional注释注释条件注释,例如:

@Conditional(OnProfileSuffixCondition.class)

OnProfileSuffixConditionSpringBootCondition的实施)中,您可以使用以下方式检索有效的个人资料:

conditionContext.getEnvironment().getActiveProfiles()

要从注释中检索值,您可以使用:

annotatedTypeMetadata.getAllAnnotationAttributes(ConditionalOnProfileSuffix.class.getName()); 

这将返回MultiValuedMap,其中键是注释属性名称,值是任何对象(取决于类型)。