2013-03-13 7 views
11


क्या आप कृपया मुझे बता सकते हैं कि वसंत जावाकोनफिग का उपयोग कैसे एक जावा फाइल को सीधे लोड/ऑटोवायर करने के लिए java.util.Properties फ़ील्ड में करें?java.util.Properties फ़ील्ड के लिए स्प्रिंग जावाकॉन्फिग

धन्यवाद!

बाद में संपादित करें - अभी भी जवाब के लिए खोज: यह वसंत JavaConfig साथ लोड करने के लिए एक गुण एक java.util.Properties क्षेत्र में सीधे फाइल संभव है?

उत्तर

8

एक्सएमएल आधार रास्ता:

वसंत config में:

<util:properties id="myProperties" location="classpath:com/foo/my-production.properties"/> 
अपनी कक्षा में

:

@Autowired 
@Qualifier("myProperties") 
private Properties myProperties; 

JavaConfig केवल

ऐसा लगता है कि वहाँ एक एनोटेशन है :

@PropertySource("classpath:com/foo/my-production.properties") 

इस के साथ एक वर्ग को एनोटेट करने से फाइल में गुणों को पर्यावरण में लोड किया जाएगा। संपत्तियों को प्राप्त करने के लिए आपको कक्षा में पर्यावरण को स्वचालित करना होगा।

@Configuration 
@PropertySource("classpath:com/foo/my-production.properties") 
public class AppConfig { 

@Autowired 
private Environment env; 

public void someMethod() { 
    String prop = env.getProperty("my.prop.name"); 
    ... 
} 

मुझे सीधे Java.util.properties में इंजेक्ट करने का कोई तरीका नहीं दिख रहा है। लेकिन आप एक ऐसी कक्षा बना सकते हैं जो इस एनोटेशन का उपयोग करती है जो एक रैपर के रूप में कार्य करती है, और इस तरह के गुण बनाती है।

+0

धन्यवाद, लेकिन मुझे दिलचस्पी है कि इस परिणाम को केवल स्प्रिंग जावाकॉन्फिग का उपयोग करके, XML फ़ाइल के बिना ... – Roxana

+0

@Roxana oops। मेरी पोस्ट संपादित की। – jacobhyphenated

+1

उत्तर के लिए धन्यवाद। मेरे पास एक विशेष स्थिति है जहां मुझे निश्चित रूप से गुण फ़ील्ड की आवश्यकता है। मैं रैपर के साथ अपने विचार को ध्यान में रखूंगा, लेकिन मुझे आश्चर्य है कि कोई आसान समाधान नहीं है ... :) – Roxana

1

एक्सएमएल कॉन्फ़िगरेशन का उपयोग करके सीधे इंजेक्शन लगाने के लिए यह दृष्टिकोण भी है। संदर्भ एक्सएमएल इस

<util:properties id="myProps" location="classpath:META-INF/spring/conf/myProps.properties"/> 

है और जावा वर्ग सिर्फ

@javax.annotation.Resource 
private Properties myProps; 

देखा का उपयोग करता है !! यह भार करता है। वसंत आपके कोड में चर के नाम से जुड़ने के लिए xml में 'id' विशेषता का उपयोग करता है।

1

यह एक पुराना विषय है लेकिन एक और बुनियादी समाधान भी है।

@Configuration 
public class MyConfig { 
    @Bean 
    public Properties myPropertyBean() { 
     Properties properties = new Properties(); 
     properties.load(...); 
     return properties; 
    } 
} 
4

PropertiesFactoryBean घोषित करें।

@Bean 
public PropertiesFactoryBean mailProperties() { 
    PropertiesFactoryBean bean = new PropertiesFactoryBean(); 
    bean.setLocation(new ClassPathResource("mail.properties")); 
    return bean; 
} 

विरासत कोड config

<bean id="mailConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location" value="classpath:mail.properties"/> 
</bean> 

परिवर्तित कि जावा config के रूप में ऊपर दिखाए गए सुपर आसान है निम्नलिखित था।

+1

धन्यवाद मेरा उत्तर नीचे एक लाख धन्यवाद। – vikingsteve

0

आवेदन।YML:

root-something: 
    my-properties: 
     key1: val1 
     key2: val2 

आपका प्रकार- सुरक्षित POJO:

import java.util.Properties; 
import org.springframework.boot.context.properties.ConfigurationProperties; 

@ConfigurationProperties(prefix = "root-something") 
public class RootSomethingPojo { 

    private Properties myProperties; 

आपका कंटेनर विन्यास:

@Configuration 
@EnableConfigurationProperties({ RootSomethingPojo .class }) 
public class MySpringConfiguration { 

यह myProperties क्षेत्र में सीधे कुंजी-मान जोड़ों इंजेक्षन जाएगा।

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