2014-10-19 8 views
12

मैं स्प्रिंग-बूट-1.1.7 का उपयोग कर रहा हूं। मेरा इरादा टाइप स्ट्रिंग की संपत्ति के मूल्य के अनुसार मेरे संदर्भ में एक बीन जोड़ना है।वसंत बूट - @ConditionalOnProperty या @ConditionalOnExpression

मेरा मतलब है, मैं इस जैसे बूलियन मूल्यों का उदाहरण के एक बहुत देख सकते हैं:

@ConditionalOnExpression("${xxx.enabled:true}") 

लेकिन मैं एक संपत्ति के एक मूल्य के आधार पर एक अभिव्यक्ति चाहते हैं, उदाहरण के लिए:

@ConditionalOnExpression("${server.host==localhost} or ${server.port==8080} ") 

या ऐसा कुछ।

क्या कोई मुझे उदाहरण दिखा सकता है कि यह कैसे करें?

उत्तर

11

आखिरकार, यह एक मेरे लिए काम किया:

@ConditionalOnExpression("'${server.host}'=='localhost'") 
+0

हाँ जो काम करेगा (वास्तव में स्पष्ट)। आप 2 अक्षर की तुलना कर रहे हैं। –

+1

बस पुष्टि करने के लिए, भले ही इसके उद्धृत, $ {server.host} को सही तरीके से हल किया गया हो? तो अगर server.host 'foobar' है, तो अभिव्यक्ति का मूल्यांकन 'foobar' == 'localhost' के रूप में किया जाता है? – JBCP

+0

हां यह है, और मूल्यांकन सही ढंग से किया जाता है, केवल तभी जब आप इसे उद्धृत करते हैं। – Modi

1

यदि आप जिस मूल्य की तुलना करना चाहते हैं वह एक शाब्दिक है, तो आपको इसे उद्धृत करने की आवश्यकता है, और प्लेसहोल्डर संपत्ति के नाम (संपूर्ण अभिव्यक्ति नहीं) के आसपास जाएगा, उदाहरण के लिए ${server.host}=='localhost'

+0

अपने उदाहरण इस अपवाद के साथ समाप्त हो गया रखने: 'की वजह से: org.springframework.expression .spel.SpelEvaluationException: EL1008E: (pos 0): संपत्ति या फ़ील्ड 'localhost' प्रकार 'org.springframework.beans.factory.config.BeanExpressionContext' के ऑब्जेक्ट पर नहीं मिल सकता है - शायद सार्वजनिक नहीं? मैंने अभिव्यक्ति को जोड़ा जो काम (आश्चर्यजनक रूप से, मुझे कहना होगा) नीचे दिए गए जवाब पर। वैसे भी, धन्यवाद। – Modi

15

संपत्ति के मूल्य के लिए सशर्त मैं प्रयोग किया है:

@ConditionalOnProperty(name="server.host", havingValue="localhost")