স্প্রিং সহ প্রোগ্রামিমে ফাইলগুলিতে অ্যাক্সেস করবেন?


137

আমরা একটি বৈশিষ্ট্য ফাইল থেকে বৈশিষ্ট্য সহ স্প্রিং মটরশুটি ইনজেক্ট করতে নীচের কোডটি ব্যবহার করি।

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:/my.properties"/>
</bean>

<bean id="blah" class="abc">
    <property name="path" value="${the.path}"/>
</bean>

প্রোগ্রামের মাধ্যমে আমরা সম্পত্তিগুলি অ্যাক্সেস করতে পারি এমন কোনও উপায় আছে কি? আমি নির্ভরতা ইনজেকশন ছাড়াই কিছু কোড করার চেষ্টা করছি। সুতরাং আমি এই জাতীয় কিছু কোড পেতে চাই:

PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.load("classpath:/my.properties");
props.get("path");

বসন্তে সম্পত্তি ফাইলগুলি অ্যাক্সেসের সম্পূর্ণ উদাহরণ নীচের লিঙ্কটিতে রয়েছে: bharatonjava.wordpress.com/2012/08/24/…

উত্তর:


171

প্রোপার্টি লোডার ইউটিলস সম্পর্কে কীভাবে ?

Resource resource = new ClassPathResource("/my.properties");
Properties props = PropertiesLoaderUtils.loadProperties(resource);

5
এখানে একটি প্রশ্ন রয়েছে, এটি আমার থেকে কীভাবে আলাদা এবং এর মধ্যে আরও দুটি ভোট রয়েছে এবং দ্বিতীয় পোস্ট হয়েছে ...
জোয়েডবার্গ

3
আমাকে মারছে, আমি ভোট দিতে পারিনি :) আমি একটি ব্যবহার করব না PropertyPlaceholderConfigurer, যদিও এটি কাজের জন্য ওভারকিল ill
স্কাফম্যান

5
আমি তাঁর যতটুকু সম্ভব ছিল তার কাছাকাছি যাওয়ার চেষ্টা করছিলাম, পর্যাপ্ত বিবরণ না দেওয়ার জন্য আমি অনেকবার হ্রাস পেয়েছি। যে কোনও ক্ষেত্রে, আপনার উত্তরগুলি ভোটের জন্য প্রাপ্য, যেমনটি সঠিক, আমি অনুমান করি যে আমি ঠিক alousর্ষান্বিত আমিও দুটি ভোট পাইনি, এলওএল।
জোয়েডবার্গ

1
ফাইলটি যদি বাহ্যিক ডিরেক্টরিতে স্থাপন করা হয় তবে আমাদের কী দেওয়া উচিত, কনফিগারেশন ফোল্ডারটি বলি?
prnjn

52

যদি আপনি যা করতে চান তেমন কোড থেকে স্থানধারক মানটি অ্যাক্সেস করতে হয় তবে এখানে @Valueটীকা রয়েছে:

@Value("${settings.some.property}")
String someValue;

স্পেল থেকে স্থানধারীদের অ্যাক্সেস করতে এই সিনট্যাক্সটি ব্যবহার করুন:

#('${settings.some.property}')

স্পেল বন্ধ করে দেওয়া হয়েছে এমন কনফিগারেশনটি প্রকাশের জন্য, কেউ এই কৌশলটি ব্যবহার করতে পারেন:

package com.my.app;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.stereotype.Component;

@Component
public class PropertyPlaceholderExposer implements Map<String, String>, BeanFactoryAware {  
    ConfigurableBeanFactory beanFactory; 

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        this.beanFactory = (ConfigurableBeanFactory) beanFactory;
    }

    protected String resolveProperty(String name) {
        String rv = beanFactory.resolveEmbeddedValue("${" + name + "}");

        return rv;
    }

    @Override
    public String get(Object key) {
        return resolveProperty(key.toString());
    }

    @Override
    public boolean containsKey(Object key) {
        try {
            resolveProperty(key.toString());
            return true;
        }
        catch(Exception e) {
            return false;
        }
    }

    @Override public boolean isEmpty() { return false; }
    @Override public Set<String> keySet() { throw new UnsupportedOperationException(); }
    @Override public Set<java.util.Map.Entry<String, String>> entrySet() { throw new UnsupportedOperationException(); }
    @Override public Collection<String> values() { throw new UnsupportedOperationException(); }
    @Override public int size() { throw new UnsupportedOperationException(); }
    @Override public boolean containsValue(Object value) { throw new UnsupportedOperationException(); }
    @Override public void clear() { throw new UnsupportedOperationException(); }
    @Override public String put(String key, String value) { throw new UnsupportedOperationException(); }
    @Override public String remove(Object key) { throw new UnsupportedOperationException(); }
    @Override public void putAll(Map<? extends String, ? extends String> t) { throw new UnsupportedOperationException(); }
}

এবং তারপরে কোনও দৃশ্যে বৈশিষ্ট্য প্রকাশ করতে এক্সপোজারটি ব্যবহার করুন:

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
    <property name="attributesMap">
        <map>
            <entry key="config">
                <bean class="com.my.app.PropertyPlaceholderExposer" />
            </entry>
        </map>
    </property>
</bean>

তারপরে দেখুন, উন্মুক্ত বৈশিষ্ট্যগুলি এর মতো ব্যবহার করুন:

${config['settings.some.property']}

এই সমাধানটির সুবিধা রয়েছে যে আপনি প্রসঙ্গ দ্বারা সংযুক্ত স্ট্যান্ডার্ড প্লেসোল্ডার বাস্তবায়নের উপর নির্ভর করতে পারেন: সম্পত্তি-স্থানধারক ট্যাগ।

এখন একটি চূড়ান্ত নোট হিসাবে, যদি আপনার সমস্ত স্থানধারক সম্পত্তি এবং তাদের মানগুলি ক্যাপচার করার জন্য সত্যই দরকার হয় তবে আপনার স্ট্রিংভালিউরিজলভারের মাধ্যমে পাইপগুলি নিশ্চিত করতে হবে যে স্থানধারকরা প্রত্যাশা অনুযায়ী সম্পত্তি মানগুলির মধ্যে কাজ করে। নিম্নলিখিত কোডটি এটি করবে।

package com.my.app;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.util.StringValueResolver;

public class AppConfig extends PropertyPlaceholderConfigurer implements Map<String, String> {

    Map<String, String> props = new HashMap<String, String>();

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props)
            throws BeansException {

        this.props.clear();
        for (Entry<Object, Object> e: props.entrySet())
            this.props.put(e.getKey().toString(), e.getValue().toString());

        super.processProperties(beanFactory, props);
    }

    @Override
    protected void doProcessProperties(ConfigurableListableBeanFactory beanFactoryToProcess,
            StringValueResolver valueResolver) {

        super.doProcessProperties(beanFactoryToProcess, valueResolver);

        for(Entry<String, String> e: props.entrySet())
            e.setValue(valueResolver.resolveStringValue(e.getValue()));
    }

    // Implement map interface to access stored properties
    @Override public Set<String> keySet() { return props.keySet(); }
    @Override public Set<java.util.Map.Entry<String, String>> entrySet() { return props.entrySet(); }
    @Override public Collection<String> values() { return props.values(); }
    @Override public int size() { return props.size(); }
    @Override public boolean isEmpty() { return props.isEmpty(); }
    @Override public boolean containsValue(Object value) { return props.containsValue(value); }
    @Override public boolean containsKey(Object key) { return props.containsKey(key); }
    @Override public String get(Object key) { return props.get(key); }
    @Override public void clear() { throw new UnsupportedOperationException(); }
    @Override public String put(String key, String value) { throw new UnsupportedOperationException(); }
    @Override public String remove(Object key) { throw new UnsupportedOperationException(); }
    @Override public void putAll(Map<? extends String, ? extends String> t) { throw new UnsupportedOperationException(); }
}

এই সম্পূর্ণ উত্তর জন্য Thnx! চূড়ান্ত ক্ষেত্রগুলি দিয়ে এটি করার কোনও উপায় আছে?
ওয়ার্ড

2
@ ওয়ার্ডসি আপনি একটি চূড়ান্ত ক্ষেত্রে প্রবেশ করতে পারবেন না। তবে আপনি কোনও কনস্ট্রাক্টর আর্গুমেন্টে ইনজেক্ট করতে পারেন এবং কনস্ট্রাক্টরের ভিতরে একটি চূড়ান্ত ক্ষেত্রের মান সেট করতে পারেন। দেখুন stackoverflow.com/questions/2306078/... এবং stackoverflow.com/questions/4203302/...
anttix

50

ক্রেডিট : বৈশিষ্ট্য ফাইলটি পুনরায় পড়া না করে স্প্রিং-এ সম্পত্তিগুলিতে প্রোগ্রামেটিক অ্যাক্সেস

আমি স্প্রিং ইতিমধ্যে লোড করা একই বৈশিষ্ট্যগুলি পুনরায় লোড না করে প্রোগ্রামিংমেটিকভাবে বৈশিষ্ট্যগুলিতে অ্যাক্সেসের একটি সুন্দর বাস্তবায়ন পেয়েছি। [এছাড়াও, উত্সটিতে সম্পত্তি ফাইলের অবস্থান হার্ডকোড করার দরকার নেই]

এই পরিবর্তনগুলির সাথে, কোডটি আরও পরিষ্কার এবং আরও রক্ষণাবেক্ষণযোগ্য দেখাচ্ছে।

ধারণা বেশ সহজ। কেবল বসন্তের ডিফল্ট সম্পত্তি স্থানধারক (প্রপার্টিপ্লেসহোল্ডার কনফিগারার) প্রসারিত করুন এবং স্থানীয় ভেরিয়েবলটিতে যে বৈশিষ্ট্যগুলি লোড হয় তা ক্যাপচার করুন

public class SpringPropertiesUtil extends PropertyPlaceholderConfigurer {

    private static Map<String, String> propertiesMap;
    // Default as in PropertyPlaceholderConfigurer
    private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_FALLBACK;

    @Override
    public void setSystemPropertiesMode(int systemPropertiesMode) {
        super.setSystemPropertiesMode(systemPropertiesMode);
        springSystemPropertiesMode = systemPropertiesMode;
    }

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
        super.processProperties(beanFactory, props);

        propertiesMap = new HashMap<String, String>();
        for (Object key : props.keySet()) {
            String keyStr = key.toString();
            String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode);
            propertiesMap.put(keyStr, valueStr);
        }
    }

    public static String getProperty(String name) {
        return propertiesMap.get(name).toString();
    }

}

ব্যবহারের উদাহরণ

SpringPropertiesUtil.getProperty("myProperty")

বসন্ত কনফিগারেশন পরিবর্তন

<bean id="placeholderConfigMM" class="SpringPropertiesUtil">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="locations">
    <list>
        <value>classpath:myproperties.properties</value>
    </list>
    </property>
</bean>

আশা করি এটি আপনার সমস্যার সমাধান করতে সহায়তা করবে


8
এটি সম্পূর্ণ বাস্তবায়ন নয় এবং সঠিকভাবে কাজ করবে না। প্রপার্টিপ্লেসহোল্ডার কনফিগারার নেস্টেড স্থানধারক সহ সমস্ত স্থানধারক সম্পত্তি প্রতিস্থাপনের জন্য একটি সম্পত্তি প্লেসোল্ডারহেল্পার ব্যবহার করে। কলিঙের প্রয়োগে যদি আপনার মাইফাইল = $ {মাইফোল্ডার} / মাইফিল.টিএসটিএস্ট এর মতো কিছু থাকে তবে "মাইফাইল" কীটি ব্যবহার করে মানচিত্র থেকে আপনি যে আক্ষরিক সম্পত্তি মান পাবেন তা হ'ল। {মাইফোল্ডার} /myFile.txt।

1
এটিই সঠিক সমাধান। ব্রায়ানের উদ্বেগের সমাধান করার জন্য। $ {MyFolder একটি সিস্টেম সম্পত্তি হওয়া উচিত এবং বৈশিষ্ট্য ফাইলে থাকা উচিত নয়। এটি টমক্যাট সিস্টেমের সম্পত্তি থাকার বা গ্রহনে সেট করা সম্পত্তি রেখে সমাধান করা যেতে পারে। এমনকি আপনি একটি বিল্ড সম্পত্তি করতে সক্ষম হতে পারে। এই সমাধানটি ধরে নেওয়া হচ্ছে যে এটি একটি সামান্য এবং এর সমাধান করা উচিত তবে একই সাথে এই উত্তরটি আলাদাভাবে পরিবর্তে পরিবর্তে এক জায়গায় বসন্ত এবং জাভা বৈশিষ্ট্যগুলি লোড করার জন্য স্ট্যান্ডার্ড অনুশীলনের লাইন বরাবর অনেক বেশি। অন্য বিকল্পটি হ'ল ফাইলটিতে মাইফাইলে একটি সাধারণ বৈশিষ্ট্য ফাইল লোড করা এবং বাকীটি পেতে এটি ব্যবহার করুন।
রব

1
আমি স্প্রিং ৩.১+ থেকে 'নতুন' প্রোপার্টিসোর্সপ্লেসহোল্ডার কনফিগারারে এই কাজটি প্রয়োগ করার চেষ্টা করেছি তবে আমি দেখতে পেয়েছি যে পদ্ধতি প্রক্রিয়াপ্রসেস (কনফিগারযোগ্যলিস্টেবলফ্যান্ট্রি, প্রোপার্টি প্রপস) এখন অবচয় করা হয়েছে এবং তাই এখন 'প্রপস' যুক্তির অ্যাক্সেস নেই। প্রোপার্টিসোর্সপ্লেসহোল্ডার কনফিগারারের উত্সগুলি অনুসন্ধান করে সম্পত্তিগুলি প্রকাশের জন্য কোনও পরিষ্কার উপায় খুঁজে পাওয়া যায়নি। কোন ধারণা এটি করতে? ধন্যবাদ!
জর্জি প্যালাসিও

48

আমি এটি করেছি এবং এটি কাজ করেছে।

Properties props = PropertiesLoaderUtils.loadAllProperties("my.properties");
PropertyPlaceholderConfigurer props2 = new PropertyPlaceholderConfigurer();
props2.setProperties(props);

এটা কাজ করা উচিত।


25

আপনি বসন্তের ব্যবহারগুলিও ব্যবহার করতে পারেন, বা সম্পত্তিগুলি কারখানার বিয়ারের মাধ্যমে বৈশিষ্ট্যগুলি লোড করতে পারেন।

<util:properties id="myProps" location="classpath:com/foo/myprops.properties"/>

বা:

<bean id="myProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="location" value="classpath:com/foo/myprops.properties"/>
</bean>

তারপরে আপনি এগুলি আপনার অ্যাপ্লিকেশনটিতে এটিকে বেছে নিতে পারেন:

@Resource(name = "myProps")
private Properties myProps;

এবং অতিরিক্ত হিসাবে আপনার কনফিগারেশনে এই বৈশিষ্ট্যগুলি ব্যবহার করুন:

<context:property-placeholder properties-ref="myProps"/>

এই দস্তাবেজে হয়: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-properties


10

নীচের মত একটি বর্গ তৈরি করুন

    package com.tmghealth.common.util;

    import java.util.Properties;

    import org.springframework.beans.BeansException;

    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

    import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

    import org.springframework.context.annotation.Configuration;

    import org.springframework.context.annotation.PropertySource;

    import org.springframework.stereotype.Component;


    @Component
    @Configuration
    @PropertySource(value = { "classpath:/spring/server-urls.properties" })
    public class PropertiesReader extends PropertyPlaceholderConfigurer {

        @Override
        protected void processProperties(
                ConfigurableListableBeanFactory beanFactory, Properties props)
                throws BeansException {
            super.processProperties(beanFactory, props);

        }

    }

তারপরে আপনি যেখানেই কোনও সম্পত্তি ব্যবহার অ্যাক্সেস করতে চান

    @Autowired
        private Environment environment;
    and getters and setters then access using 

    environment.getProperty(envName
                    + ".letter.fdi.letterdetails.restServiceUrl");

- অ্যাকসেসর ক্লাসে গেটার এবং সেটটার লিখুন

    public Environment getEnvironment() {
            return environment;
        }`enter code here`

        public void setEnvironment(Environment environment) {
            this.environment = environment;
        }

1
এখন পর্যন্ত সর্বোত্তম উত্তম, কেবল পরিবেশের স্বাবলম্বন করা উচিত।
sbochins

4

আপনি যেমন জানেন যে স্প্রিংয়ের নতুন সংস্করণগুলি প্রপার্টিপ্লেসহোল্ডার কনফিগারার ব্যবহার করবেন না এবং এখন আর্টসিস্পসপ্লেসহোল্ডার কনফিগার হিসাবে পরিচিত আরেকটি নাইটমারিশ কনস্ট্রাক্ট ব্যবহার করুন। আপনি যদি কোড থেকে সমাধান করা সম্পত্তিগুলি পাওয়ার চেষ্টা করছেন, এবং চান যে স্প্রিং টিম আমাদের অনেক আগে এই কাজ করার উপায় দেয়, তবে এই পোস্টে ভোট দিন! ... কারণ আপনি এটি নতুন উপায়ে এটি করেন:

সাবক্লাস প্রোপার্টিসোর্সপ্লেসহোল্ডার কনফিগারার:

public class SpringPropertyExposer extends PropertySourcesPlaceholderConfigurer {

    private ConfigurableListableBeanFactory factory;

    /**
     * Save off the bean factory so we can use it later to resolve properties
     */
    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess,
            final ConfigurablePropertyResolver propertyResolver) throws BeansException {
        super.processProperties(beanFactoryToProcess, propertyResolver);

        if (beanFactoryToProcess.hasEmbeddedValueResolver()) {
            logger.debug("Value resolver exists.");
            factory = beanFactoryToProcess;
        }
        else {
            logger.error("No existing embedded value resolver.");
        }
    }

    public String getProperty(String name) {
        Object propertyValue = factory.resolveEmbeddedValue(this.placeholderPrefix + name + this.placeholderSuffix);
        return propertyValue.toString();
    }
}

এটি ব্যবহার করতে, আপনার @ কনফিগারেশনে আপনার সাবক্লাসটি ব্যবহার নিশ্চিত করে নিন এবং পরবর্তী ব্যবহারের জন্য এটিতে কোনও রেফারেন্স সংরক্ষণ করুন।

@Configuration
@ComponentScan
public class PropertiesConfig {

    public static SpringPropertyExposer commonEnvConfig;

    @Bean(name="commonConfig")
    public static PropertySourcesPlaceholderConfigurer commonConfig() throws IOException {
        commonEnvConfig = new SpringPropertyExposer(); //This is a subclass of the return type.
        PropertiesFactoryBean commonConfig = new PropertiesFactoryBean();
        commonConfig.setLocation(new ClassPathResource("META-INF/spring/config.properties"));
        try {
            commonConfig.afterPropertiesSet();
        }
        catch (IOException e) {
            e.printStackTrace();
            throw e;
        }
        commonEnvConfig.setProperties(commonConfig.getObject());
        return commonEnvConfig;
    }
}

ব্যবহার:

Object value = PropertiesConfig.commonEnvConfig.getProperty("key.subkey");

2

এখানে আরও একটি নমুনা দেওয়া হল।

XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml"));
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer();
cfg.setLocation(new FileSystemResource("jdbc.properties"));
cfg.postProcessBeanFactory(factory);


2

এটি কোনও নেস্টেড বৈশিষ্ট্য সমাধান করবে।

public class Environment extends PropertyPlaceholderConfigurer {

/**
 * Map that hold all the properties.
 */
private Map<String, String> propertiesMap; 

/**
 * Iterate through all the Property keys and build a Map, resolve all the nested values before building the map.
 */
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
    super.processProperties(beanFactory, props);

    propertiesMap = new HashMap<String, String>();
    for (Object key : props.keySet()) {
        String keyStr = key.toString();
        String valueStr = beanFactory.resolveEmbeddedValue(placeholderPrefix + keyStr.trim() + DEFAULT_PLACEHOLDER_SUFFIX);
        propertiesMap.put(keyStr, valueStr);
    }
} 

/**
 * This method gets the String value for a given String key for the property files.
 * 
 * @param name - Key for which the value needs to be retrieved.
 * @return Value
 */
public String getProperty(String name) {
    return propertiesMap.get(name).toString();
}

2

আপনি Environmentক্লাসের মাধ্যমে আপনার সম্পত্তি পেতে পারেন । ডকুমেন্টেশন যেমন দাঁড়িয়েছে:

বৈশিষ্ট্যগুলি প্রায় সমস্ত অ্যাপ্লিকেশনগুলিতে গুরুত্বপূর্ণ ভূমিকা পালন করে এবং বিভিন্ন উত্স থেকে উত্পন্ন হতে পারে: বৈশিষ্ট্য ফাইল, জেভিএম সিস্টেমের বৈশিষ্ট্য, সিস্টেম পরিবেশের ভেরিয়েবল, জেএনডিআই, সার্লেট প্রসঙ্গ পরামিতি, অ্যাড-হক বৈশিষ্ট্যগুলি অবজেক্টস, মানচিত্র এবং অন্যান্য। বৈশিষ্ট্যগুলির সাথে সম্পর্কিত পরিবেশগত সামগ্রীর ভূমিকা হ'ল ব্যবহারকারীকে সম্পত্তি উত্সগুলি কনফিগার করার জন্য এবং সেগুলি থেকে বৈশিষ্ট্যগুলি সমাধান করার জন্য একটি সুবিধাজনক পরিষেবা ইন্টারফেস সরবরাহ করা।

envপরিবর্তনশীল হিসাবে পরিবেশ থাকা , কেবল কল করুন:

env.resolvePlaceholders("${your-property:default-value}")

আপনি এর মাধ্যমে আপনার 'কাঁচা' বৈশিষ্ট্যগুলি পেতে পারেন:

env.getProperty("your-property")

এটি বসন্তটি নিবন্ধিত হয়েছে এমন সমস্ত বৈশিষ্ট্যের উত্স অনুসন্ধান করবে।

আপনি হয় হয় মাধ্যমে পরিবেশ অর্জন করতে পারেন:

  • প্রয়োগের মাধ্যমে অ্যাপ্লিকেশন কনটেক্সট ইনজেক্ট করুন ApplicationContextAwareএবং তারপরে কল করুনgetEnvironment() কনটেক্সট প্রসঙ্গে করুন
  • বাস্তবায়ন EnvironmentAware

এটি কোনও শ্রেণি বাস্তবায়নের মাধ্যমে অর্জন করা হয় কারণ অ্যাপ্লিকেশন শুরু হওয়ার প্রাথমিক পর্যায়ে সম্পত্তিগুলি সমাধান করা হয়, কারণ শিম তৈরির জন্য তাদের প্রয়োজন হতে পারে।

ডকুমেন্টেশনে আরও পড়ুন: বসন্ত পরিবেশের ডকুমেন্টেশন


1

এই লেখাটি হাওটুর এক্সেস বৈশিষ্ট্য explatis: http://maciej-miklas.blogspot.de/2013/07/spring-31-programmatic-access-to.html

আপনি এই ধরনের বসন্ত শিমের উপর বসন্ত সম্পত্তি-স্থানধারক দ্বারা লোড করা বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারেন:

@Named
public class PropertiesAccessor {

    private final AbstractBeanFactory beanFactory;

    private final Map<String,String> cache = new ConcurrentHashMap<>();

    @Inject
    protected PropertiesAccessor(AbstractBeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }

    public  String getProperty(String key) {
        if(cache.containsKey(key)){
            return cache.get(key);
        }

        String foundProp = null;
        try {
            foundProp = beanFactory.resolveEmbeddedValue("${" + key.trim() + "}");
            cache.put(key,foundProp);
        } catch (IllegalArgumentException ex) {
           // ok - property was not found
        }

        return foundProp;
    }
}

0
create .properties file in classpath of your project and add path configuration in xml`<context:property-placeholder location="classpath*:/*.properties" />`

servlet-context.xML এ এর ​​পরে আপনি সরাসরি আপনার ফাইলটি যে কোনও জায়গায় ব্যবহার করতে পারবেন


0

আপনার আবেদনের শ্রেণীর পথ থেকে ফাইলটি লোড করতে দয়া করে আপনার বসন্তের কনফিগারেশন ফাইলের নীচের কোডটি ব্যবহার করুন

 <context:property-placeholder
    ignore-unresolvable="true" ignore-resource-not-found="false" location="classpath:property-file-name" />

0

এটি কাজ করার জন্য এটি সর্বোত্তম উপায়:

package your.package;

import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PropertiesLoaderUtils;

public class ApplicationProperties {

    private Properties properties;

    public ApplicationProperties() {
        // application.properties located at src/main/resource
        Resource resource = new ClassPathResource("/application.properties");
        try {
            this.properties = PropertiesLoaderUtils.loadProperties(resource);
        } catch (IOException ex) {
            Logger.getLogger(ApplicationProperties.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String getProperty(String propertyName) {
        return this.properties.getProperty(propertyName);
    }
}

ক্লাসটি ইনস্টল করুন এবং কল পদ্ধতি .জেটপ্রোপার্টি ("my.property.name");
ড্যানিয়েল আলমিদা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.