चूंकि वसंत बॉक्स से बाहर और सुविधा प्रदान नहीं करता है। मैं निम्नलिखित रणनीति का सुझाव दूंगा:
वर्तमान में @Profile
एनोटेशन में सशर्त एनोटेशन @Conditional(ProfileCondition.class)
है। ProfileCondition.class
में यह प्रोफाइल के माध्यम से पुनरावृत्त करता है और जांच करता है कि प्रोफ़ाइल सक्रिय है या नहीं। इसी प्रकार आप अपना सशर्त कार्यान्वयन बना सकते हैं और बीन को पंजीकृत करना प्रतिबंधित कर सकते हैं। जैसे
public class MyProfileCondition implements Condition {
@Override
public boolean matches(final ConditionContext context,
final AnnotatedTypeMetadata metadata) {
if (context.getEnvironment() != null) {
final MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());
if (attrs != null) {
for (final Object value : attrs.get("value")) {
final String activeProfiles = context.getEnvironment().getProperty("spring.profiles.active");
for (final String profile : (String[]) value) {
if (!activeProfiles.contains(profile)) {
return false;
}
}
}
return true;
}
}
return true;
}
}
अपनी कक्षा में:
@Component
@Profile("dev")
@Conditional(value = { MyProfileCondition.class })
public class DevDatasourceConfig
नोट: मैं सभी कोने मामलों के लिए जांच न की हो (शून्य की तरह, लंबाई चेकों आदि)। लेकिन, यह दिशा मदद कर सकती है। @Mithun जवाब का
दस्तावेज़ों में अच्छी तरह से '@//' व्यवहार के रूप में उल्लेख किया गया है '@profile ("a", "b") '। क्या आप वह नहीं ढूंढ रहे हैं? दस्तावेज़ - 'इसी तरह, यदि @ कॉम्पोनेंट या @ कॉन्फ़िगरेशन क्लास को @ प्रोफाइल ({"पी 1", "पी 2"} के साथ चिह्नित किया गया है), तब तक उस श्रेणी को पंजीकृत/संसाधित नहीं किया जाएगा जब तक प्रोफाइल' पी 1 'और/या' पी 2 ' सक्रिय किया गया। –
@JavaBond जिसका अर्थ है कि यह "OR" ऑपरेटर है और नहीं "AND"। वे सिर्फ स्पष्ट रूप से इंगित करना चाहते थे कि यह अनन्य नहीं है या (xor) – Artem
मैंने प्रोफ़ाइल एनोटेशन के लिए "AND" ऑपरेटर का समर्थन करने के लिए स्प्रिंग स्रोत के लिए टिकट खोला: https://jira.spring.io/browse/SPR-12458 – Artem