2015-02-03 14 views
15

मैं बसंत के लिए काफी नया हूं इसलिए मुझे यह बेवकूफ सवाल है कि यह एक बेवकूफ सवाल है। जब मैं एक प्रोग्राम लॉन्च करने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिलती है: java.lang.IllegalArgumentException: Could not resolve placeholder 'appclient' in string value [${appclient}]। जब निम्न कोड निष्पादित त्रुटि फेंक दिया जाता है:वसंत प्लेसहोल्डर को हल नहीं कर सका

package ca.virology.lib2.common.config.spring.properties; 
import ca.virology.lib2.config.spring.PropertiesConfig; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Import; 
import org.springframework.context.annotation.PropertySource; 

@Configuration 
@Import({PropertiesConfig.class}) 
@PropertySource("${appclient}") 
public class AppClientProperties { 
private static final Logger log = LoggerFactory.getLogger(AppClientProperties.class); 
{ 
    //this initializer block will execute when an instance of this class is created by Spring 
    log.info("Loading AppClientProperties"); 
} 
@Value("${appclient.port:}") 
private int appClientPort; 

@Value("${appclient.host:}") 
private String appClientHost; 

public int getAppClientPort() { 
    return appClientPort; 
} 

public String getAppClientHost() { 
    return appClientHost; 
} 
} 

एक संपत्ति फ़ाइल कहा जाता appclient.properties मेजबान और बंदरगाह के लिए जानकारी के साथ संसाधन फ़ोल्डर में मौजूद है। मुझे यकीन नहीं है कि "${appclient}" परिभाषित किया गया है, अगर यह बिल्कुल है। शायद यह भी परिभाषित नहीं किया गया है और यह समस्या पैदा कर रहा है। क्या मुझे "${appclient}" को "{classpath:/appclient.properties}" जैसी चीज़ों में बदलने की ज़रूरत है या क्या मुझे कुछ और याद आ रहा है?

+0

तुम्हें यकीन classpath का उपयोग कर PropertySource संदर्भ सकता है: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html –

+0

मैं वास्तव में चलाने के लिए कोशिश कर रहा था इस कार्यक्रम, इसे 'ए' नामक एक अलग कार्यक्रम के भीतर 'बी' नाम दें। जाहिर है जब आप प्रोग्राम बी को व्यक्तिगत रूप से निष्पादित करते हैं, तो इसे प्रोग्राम तर्क के रूप में '$ {appclient}' मान मिलता है; हालांकि, ऐसा तब नहीं हुआ जब मैं ए से बी चलाने की कोशिश करता था और मुझे जो त्रुटि मिली थी। – Brkk

उत्तर

12

आप गुण फ़ाइल को सही तरीके से नहीं पढ़ रहे हैं। प्रॉपर्टीसोर्स को पैरामीटर को file:appclient.properties या classpath:appclient.properties के रूप में पास करना चाहिए। में टिप्पणी बदलें:

@PropertySource(value={"classpath:appclient.properties"}) 

हालांकि मैं नहीं जानता कि क्या आपके PropertiesConfig फ़ाइल है, के रूप में आपको लगता है कि यह भी आयात कर रहे हैं। आदर्श रूप से @PropertySource एनोटेशन वहां रखा जाना चाहिए था।

8

आप स्प्रिंग 3.1 और इसके बाद के संस्करण का उपयोग कर रहे हैं, तो आप की तरह कुछ का उपयोग कर सकते हैं ...

@Configuration 
@PropertySource("classpath:foo.properties") 
public class PropertiesWithJavaConfig { 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 
} 

तुम भी एक्सएमएल विन्यास की तरह से जा सकते हैं ...

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <context:property-placeholder location="classpath:foo.properties" /> 

    </beans> 

पहले के संस्करणों में ।

संबंधित मुद्दे