Я не могу сказать, что для SPeL я знаю, что он поддерживает Regex с "совпадениями" (специальным словом), однако я думаю, что это слишком fr agile, поэтому я предлагаю другой способ: Использовать Условное с пользовательским условием.
Фактически @Profile
, представленный в Spring 3.x, был переписан весной 4 для реализации с более гибким «условным подходом».
Взгляните на исходный код аннотации профиля:
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(ProfileCondition.class)
public @interface Profile {
/**
* The set of profiles for which the annotated component should be registered.
*/
String[] value();
}
Обратите внимание, что Профиль реализован как «Условный» и имеет настраиваемое условие, которое проверяет все запущенные в настоящий момент профили и решает, соответствует ли условие.
Вот реализация Условия весной 4:
class ProfileCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
if (context.getEnvironment() != null) {
MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());
if (attrs != null) {
for (Object value : attrs.get("value")) {
if (context.getEnvironment().acceptsProfiles(((String[]) value))) {
return true;
}
}
return false;
}
}
return true;
}
}
Таким образом, вы можете создать свою собственную аннотацию, такую как @Production
, с вашим пользовательским условием, которое проверяет профили и, если вы тестируете, - не совпадают или что-то в этом роде.
Затем введите @Production
в конфигурацию (класс ConfigureData
в вопросе), и все готово!