如何在@Profile
中使用通配符?
例如:
@Profile("*-from-db")
private class Foo {
当Foo
以spring.profiles.active
结束时,应激活 "-from-db"
bean;比如dev-from-db,qa-from-db,prod-from-db等等。
答案 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)
在OnProfileSuffixCondition
(SpringBootCondition
的实施)中,您可以使用以下方式检索有效的个人资料:
conditionContext.getEnvironment().getActiveProfiles()
要从注释中检索值,您可以使用:
annotatedTypeMetadata.getAllAnnotationAttributes(ConditionalOnProfileSuffix.class.getName());
这将返回MultiValuedMap
,其中键是注释属性名称,值是任何对象(取决于类型)。