আমি কীভাবে একটি স্প্রিং বিনের মধ্যে একটি সম্পত্তি মান ইনজেক্ট করতে পারি যা টীকাগুলি ব্যবহার করে কনফিগার করা হয়েছিল?


294

আমার কাছে স্প্রিং মটরশুটি রয়েছে যা ক্লাসপথ থেকে টীকাগুলির মাধ্যমে তুলে নেওয়া হয়, যেমন eg

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {
    // Implementation omitted
}

স্প্রিং এক্সএমএল ফাইলে, একটি সম্পত্তি প্লেসহোল্ডার কনফিগারারের সংজ্ঞা দেওয়া আছে:

<bean id="propertyConfigurer" 
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/app.properties" />
</bean> 

আমি উপরের দেখানো শিমের মধ্যে app.properites থেকে একটি বৈশিষ্ট্য ইনজেকশন করতে চাই। আমি সহজভাবে কিছু করতে পারি না

<bean class="com.example.PersonDaoImpl">
    <property name="maxResults" value="${results.max}"/>
</bean>

কারণ পার্সনডাওআইএমপিএল স্প্রিং এক্সএমএল ফাইলটিতে উপস্থিত হয় না (এটি ক্লাসপথ থেকে টীকাগুলির মাধ্যমে নেওয়া হয়)। আমি নিম্নলিখিত হিসাবে পেয়েছি:

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {

    @Resource(name = "propertyConfigurer")
    protected void setProperties(PropertyPlaceholderConfigurer ppc) {
    // Now how do I access results.max? 
    }
}

তবে আমি যে সম্পত্তিটি থেকে আগ্রহী তা আমি কীভাবে অ্যাক্সেস করব তা আমার কাছে পরিষ্কার নয় ppc?


1
আমি মূলত একই প্রশ্নটি জিজ্ঞাসা করেছি, যদিও কিছুটা ভিন্ন দৃশ্যে : স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৩১০২71১/২ । এখনও অবধি কেউ এর উত্তর দিতে পারেনি।
স্পেন্সার কোর্মোস

দয়া করে মনে রাখবেন যে স্প্রিং ৩.১ হিসাবে, PropertyPlaceholderConfigurerআর সুপারিশ করা বর্গ নয়। PropertySourcesPlaceholderConfigurerপরিবর্তে পছন্দ । যে কোনও ক্ষেত্রে, আপনি খাটো এক্সএমএল সংজ্ঞা ব্যবহার করতে পারেন <context:property-placeholder />
মাইকেল পিফেল

উত্তর:


292

আপনি EL সমর্থন ব্যবহার করে স্প্রিং 3 এ এটি করতে পারেন। উদাহরণ:

@Value("#{systemProperties.databaseName}")
public void setDatabaseName(String dbName) { ... }

@Value("#{strategyBean.databaseKeyGenerator}")
public void setKeyGenerator(KeyGenerator kg) { ... }

systemPropertiesএকটি অন্তর্নিহিত বস্তু এবং strategyBeanএকটি শিমের নাম।

আরও একটি উদাহরণ, যা যখন আপনি কোনও Propertiesবস্তু থেকে কোনও সম্পত্তি দখল করতে চান তখন কাজ করে । এটি @Valueক্ষেত্রগুলিতে আপনি প্রয়োগ করতে পারেন তাও দেখায় :

@Value("#{myProperties['github.oauth.clientId']}")
private String githubOauthClientId;

আমি এখানে আরও কিছু তথ্যের জন্য একটি ব্লগ পোস্ট লিখেছি।


8
কি systemPropertiesকেবল System.getProperties()? আমার ধারণা আমি যদি আমার নিজস্ব সম্পত্তিগুলি একটি বসন্ত বিনের সাথে ইনজেকশন করতে চাই <bean id="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">তবে তার থেকে অন্য শিমের মতো কিছু ব্যবহার করে এর পরে মানগুলি পড়তে হবে@Value("#{appProperties.databaseName}")
ডোনাল

11
সর্বাধিকের উত্তরটি লক্ষ করুন যে আপনি place b db.doStuff ions অভিব্যক্তিগুলিতে স্থানধারকও ব্যবহার করতে পারেন, তবে আপনার কোনও প্রোপার্টিফ্যাক্টরিবিয়ান দরকার নেই, কেবল একটি স্থানধারক
কনফিগারারের দরকার নেই

9
আপনি ব্যবহার করে নিজস্ব বৈশিষ্ট্যগুলি যুক্ত করতে পারেন: বৈশিষ্ট্য; উদাহরণস্বরূপ, <ব্যবহারকারীর বৈশিষ্ট্য আইডি = "কনফিগারেশন" অবস্থান = "শ্রেণিপথ: / স্প্রিং / এনভায়রনমেন্ট p প্রপার্টি" />। কীভাবে মান পাবেন তার সম্পাদিত উত্তর দেখুন। (আমি বুঝতে পেরেছি যে

2
এটি কেবল তখনই আমার জন্য কাজ করেছিল যখন আমি ব্যবহারকারীর নামগুলি ব্যবহার করি: আমার অ্যাপ্লিকেশন-servlet.xml ফাইল। আমার অ্যাপ্লিকেশন কনটেক্সট.এক্সএমএল (স্প্রিং এমভিসি এক নয়) এ সংজ্ঞায়িত সম্পত্তি কনফিগারারের ব্যবহার কাজ করে না।
আসফ মেসিকা

: একটু আরো পড়ার জন্য, এই কিছু যে অভিজ্ঞতা বর্ণনা করেছেন, এই SOF প্রশ্নটা করা কি খুব পরীক্ষা stackoverflow.com/questions/6425795/...
arcseldon

143

ব্যক্তিগতভাবে আমি স্প্রিং 3.0.০ এ ডক্স থেকে এই নতুন উপায়ে পছন্দ করি :

private @Value("${propertyName}") String propertyField;

গেটার বা সেটার নেই!

কনফিগারেশনের মাধ্যমে বৈশিষ্ট্যগুলি লোড হচ্ছে:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="classpath:propertyFile.properties" name="propertiesBean"/>

আমার উল্লাসটি আরও বাড়ানোর জন্য আমি এমনকি ইন্টেলিজজে ইএল এক্সপ্রেশনটিতে ক্লিক করতে পারি এবং এটি আমাকে সম্পত্তি সংজ্ঞাতে নিয়ে আসে!

সম্পূর্ণ নন এক্সএমএল সংস্করণও রয়েছে :

@PropertySource("classpath:propertyFile.properties")
public class AppConfig {

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

9
পি: প্রিফিক্সড বৈশিষ্ট্যগুলি ব্যবহার করতে নিশ্চিত হন এবং নেমস্পেসে ইউরি এক্সএমএলএনএস যুক্ত করুন: p = " বসন্তের ফ্রেমওয়ার্ক. org/schema/p" ।
শানে লি

3
কেন এই পদ্ধতিগুলি পরীক্ষার প্রসঙ্গে কাজ করে তবে মূল প্রসঙ্গে নয়?
luksmir

9
দীর্ঘশ্বাস, আমি কেবল টীকা-রচনাগুলি কেবলমাত্র কাজ করার চেষ্টা করার সময় ব্যয় করেছি এবং আবিষ্কার করেছি কেবল এই উত্তরটি পড়ার পরে কী অনুপস্থিত রয়েছে a একটি icalন্দ্রজালিক স্ট্যাটিক শিম সম্পত্তিসৌস ইয়াদায়দা এর ঘোষণা। বসন্তের ভালবাসা!
ক্রানচ

@ বার্যম্যাক হে ব্যারি, আপনি কি জানেন যে @ ভ্যালু (# {...}) এবং @ ভ্যালু ($ {...}) এর মধ্যে পার্থক্য কী? আপনাকে ধন্যবাদ
কিম

1
এটি আমার পক্ষে কাজ করে। কেবলমাত্র একটি টিপ: টীকা @ কম্পোনেন্টের প্রয়োজন।
ইয়াকি_নুকা

121

স্প্রিং 3.0.0M3 এ একটি নতুন টিকা @Valueআছে । সমর্থন শুধুমাত্র অভিব্যক্তি নয় পাশাপাশি স্থানধারীদেরও@Value#{...}${...}


20
+1 উদাহরণ যদি সহায়তা করে তবে তা এখানে রয়েছে - @ ভ্যালু (মান = "# {'$ {সার্ভার.এনভি}'}") বা কেবলমাত্র @ ভ্যালু ("# {'$ server.env}'}")
সোমু

31

<context:property-placeholder ... /> প্রপার্টিপ্লেসহোল্ডার কনফিগারারের সমান এক্সএমএল।

উদাহরণ: applicationContext.xML

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

উপাদান শ্রেণি

 private @Value("${propertyName}") String propertyField;

1
আমার জন্য, এটি কেবল তখনই কাজ করেছিল যদি অটোয়ারিংয়ের মাধ্যমে সক্রিয় করা হয় <context:component-scan base-package="com.company.package" />রেফারেন্সের জন্য, আমি স্প্রিংটি ApplicationContextওয়েবের প্রসঙ্গে নয়, এর মাধ্যমে ব্যবহার করছি ।
মোস্তফা

15

আরেকটি বিকল্প হ'ল নীচে দেখানো অ্যাপপ্রোপার্টি শিম যুক্ত করুন:

<bean id="propertyConfigurer"   
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="/WEB-INF/app.properties" />
</bean> 


<bean id="appProperties" 
          class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="singleton" value="true"/>

        <property name="properties">
                <props>
                        <prop key="results.max">${results.max}</prop>
                </props>
        </property>
</bean>

পুনরুদ্ধার করা হলে, এই শিমটি এমন একটিতে কাস্ট করা যেতে পারে java.util.Propertiesযার মধ্যে এমন একটি সম্পত্তি থাকবে results.maxযার নাম পড়ে নেওয়া হবে app.properties। আবার এই বিনটি @ রিসোর্স টীকা দ্বারা যে কোনও শ্রেণিতে নির্ভরতা ইনজেকশনের (java.util.Properties উদাহরণ হিসাবে) হতে পারে।

ব্যক্তিগতভাবে, আমি এই সমাধানটিকে অগ্রাধিকার দেব (আমি প্রস্তাবিত অন্যটির তুলনায়), কারণ আপনি ঠিক কী অ্যাপ্লিকেশন দ্বারা কোন সম্পত্তি প্রকাশ করা হয়েছে তা সীমাবদ্ধ করতে পারেন এবং অ্যাপ.প্রপ্রেটিগুলি দুবার পড়ার প্রয়োজন নেই।


আমার জন্যও কাজ করে। তবে @ ভ্যালু টিকা-র মাধ্যমে প্রোপার্টিপ্লেসহোল্ডার কনফিগারার থেকে সম্পত্তিগুলি অ্যাক্সেস করার অন্য কোনও উপায় নেই (যখন বেশ কয়েকটি কংগিফ এক্সএমএল ফাইলগুলিতে একাধিক সম্পত্তিপ্লেসোল্ডার কনফিগারার ব্যবহার করা হয়)?
সিজার

9

আমার দুটি প্রোপার্টি ফাইল থাকা দরকার, একটি উত্পাদনের জন্য এবং বিকাশের জন্য একটি ওভাররাইড (এটি মোতায়েন করা হবে না)।

একটি সম্পত্তি বৈশিষ্ট্য বিন যা স্বায়ত্তশাসিত হতে পারে এবং একটি সম্পত্তি কনফিগারার উভয়ই রাখতে আপনি লিখতে পারেন:

<bean id="appProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="singleton" value="true" />

    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:live.properties</value>
            <value>classpath:development.properties</value>
        </list>
    </property>
</bean>

এবং প্রপার্টি কনফিগারারে প্রোপার্টি বিনের রেফারেন্স দিন

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="properties" ref="appProperties" />
</bean>

7

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

@Property(key="property.key", defaultValue="default")
public void setProperty(String property) {
    this.property = property;
}

টীকাটি নিম্নরূপ:

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD, ElementType.FIELD})
public @interface Property {
    String key();
    String defaultValue() default "";
}

সম্পত্তি অ্যানোটেশন এবং প্লেসহোল্ডার কনফিগারার নীচে রয়েছে:

public class PropertyAnnotationAndPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

    private static Logger log = Logger.getLogger(PropertyAnnotationAndPlaceholderConfigurer.class);

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

        for (String name : beanFactory.getBeanDefinitionNames()) {
            MutablePropertyValues mpv = beanFactory.getBeanDefinition(name).getPropertyValues();
            Class clazz = beanFactory.getType(name);

            if(log.isDebugEnabled()) log.debug("Configuring properties for bean="+name+"["+clazz+"]");

            if(clazz != null) {
                for (PropertyDescriptor property : BeanUtils.getPropertyDescriptors(clazz)) {
                    Method setter = property.getWriteMethod();
                    Method getter = property.getReadMethod();
                    Property annotation = null;
                    if(setter != null && setter.isAnnotationPresent(Property.class)) {
                        annotation = setter.getAnnotation(Property.class);
                    } else if(setter != null && getter != null && getter.isAnnotationPresent(Property.class)) {
                        annotation = getter.getAnnotation(Property.class);
                    }
                    if(annotation != null) {
                        String value = resolvePlaceholder(annotation.key(), properties, SYSTEM_PROPERTIES_MODE_FALLBACK);
                        if(StringUtils.isEmpty(value)) {
                            value = annotation.defaultValue();
                        }
                        if(StringUtils.isEmpty(value)) {
                            throw new BeanConfigurationException("No such property=["+annotation.key()+"] found in properties.");
                        }
                        if(log.isDebugEnabled()) log.debug("setting property=["+clazz.getName()+"."+property.getName()+"] value=["+annotation.key()+"="+value+"]");
                        mpv.addPropertyValue(property.getName(), value);
                    }
                }

                for(Field field : clazz.getDeclaredFields()) {
                    if(log.isDebugEnabled()) log.debug("examining field=["+clazz.getName()+"."+field.getName()+"]");
                    if(field.isAnnotationPresent(Property.class)) {
                        Property annotation = field.getAnnotation(Property.class);
                        PropertyDescriptor property = BeanUtils.getPropertyDescriptor(clazz, field.getName());

                        if(property.getWriteMethod() == null) {
                            throw new BeanConfigurationException("setter for property=["+clazz.getName()+"."+field.getName()+"] not available.");
                        }

                        Object value = resolvePlaceholder(annotation.key(), properties, SYSTEM_PROPERTIES_MODE_FALLBACK);
                        if(value == null) {
                            value = annotation.defaultValue();
                        }
                        if(value == null) {
                            throw new BeanConfigurationException("No such property=["+annotation.key()+"] found in properties.");
                        }
                        if(log.isDebugEnabled()) log.debug("setting property=["+clazz.getName()+"."+field.getName()+"] value=["+annotation.key()+"="+value+"]");
                        mpv.addPropertyValue(property.getName(), value);
                    }
                }
            }
        }
    }

}

স্বাদ পরিবর্তন করতে নির্দ্বিধায়


3
দয়া করে নোট করুন, আমি উপরের জন্য একটি নতুন প্রকল্প তৈরি করেছি: কোড. google.com/p/spring-property-annotations
রিকার্ডো গ্ল্যাডওয়েল

7

আপনি ক্লাসটি বেনিফিট করতে পারেন:

@PropertySource("classpath:/com/myProject/config/properties/database.properties")

এবং এর মত একটি ভেরিয়েবল আছে:

@Autowired
private Environment env;

এখন আপনি এইভাবে আপনার সমস্ত বৈশিষ্ট্যে অ্যাক্সেস করতে পারেন:

env.getProperty("database.connection.driver")

7

বসন্তের উপায়:
private @Value("${propertyName}") String propertyField;

স্প্রিংয়ের "প্রপার্টিপ্লেসহোল্ডার কনফিগারার" শ্রেণিটি ব্যবহার করে মানটি ইনজেক্ট করার একটি নতুন উপায়। আর একটি উপায় কল করা হয়

java.util.Properties props = System.getProperties().getProperty("propertyName");

দ্রষ্টব্য: @ ভ্যালুয়ের জন্য, আপনি স্থিতিশীল সম্পত্তি ফিল্ড ব্যবহার করতে পারবেন না , এটি কেবল অ স্থির হওয়া উচিত, অন্যথায় এটি বাতিল হয় returns এটি ঠিক করতে স্ট্যাটিক ফিল্ডের জন্য একটি অ স্ট্যাটিক সেটার তৈরি করা হয় এবং সেই সেটারের উপরে @ ভ্যালু প্রয়োগ করা হয়।


7

যেমনটি @Valueকাজটি উল্লেখ করেছে এবং এটি আপনার মধ্যে বসন্ত EL থাকতে পারে তাই এটি বেশ নমনীয়।

এখানে কয়েকটি উদাহরণ রয়েছে, যা সহায়ক হতে পারে:

//Build and array from comma separated parameters 
//Like currency.codes.list=10,11,12,13
@Value("#{'${currency.codes.list}'.split(',')}") 
private List<String> currencyTypes;

অন্য একটি setথেকে একটি পেতেlist

//If you have a list of some objects like (List<BranchVO>) 
//and the BranchVO has areaCode,cityCode,...
//You can easily make a set or areaCodes as below
@Value("#{BranchList.![areaCode]}") 
private Set<String> areas;

আপনি আদিম ধরণের জন্য মানগুলিও সেট করতে পারেন।

@Value("${amount.limit}")
private int amountLimit;

আপনি স্থিতিশীল পদ্ধতিতে কল করতে পারেন:

@Value("#{T(foo.bar).isSecurityEnabled()}")
private boolean securityEnabled;

আপনার যুক্তি থাকতে পারে

@Value("#{T(foo.bar).isSecurityEnabled() ? '${security.logo.path}' : '${default.logo.path}'}")
private String logoPath;

5

একটি সম্ভাব্য সমাধানগুলি হ'ল দ্বিতীয় সিম ঘোষণা করা যা একই বৈশিষ্ট্য ফাইল থেকে পড়ে:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/app.properties" />
</bean> 

<util:properties id="appProperties" location="classpath:/WEB-INF/app.properties"/>

'অ্যাপপ্রোপারটিস' নামের শিমটি java.util.Properties প্রকারের এবং উপরে প্রদর্শিত @ রিসোর্স আধিকারিক ব্যবহার করে ইনজেকশন হতে পারে।


4

আপনি যদি স্প্রিং 2.5 ব্যবহার করে আটকে থাকেন তবে আপনি আপনার প্রতিটি বৈশিষ্ট্যের জন্য একটি শিমের সংজ্ঞা দিতে এবং কোয়ালিফায়ার ব্যবহার করে ইনজেকশন করতে পারেন। এটার মত:

  <bean id="someFile" class="java.io.File">
    <constructor-arg value="${someFile}"/>
  </bean>

এবং

@Service
public class Thing
      public Thing(@Qualifier("someFile") File someFile) {
...

এটি সুপার পঠনযোগ্য নয় তবে এটি কাজটি সম্পন্ন করে।


2

স্প্রিং শিমের মধ্যে সম্পত্তি মানগুলি স্বীকৃত:

বেশিরভাগ লোকেরা জানেন যে আপনি যখন স্প্রিংকে আপনার অ্যাপ্লিকেশন প্রসঙ্গটি লোড করেন তখন একটি বস্তুকে অন্যটিতে ইনজেক্ট করতে স্প্রিংকে বলতে অটোওয়ার্ড ব্যবহার করতে পারেন। তথ্যের একটি কম পরিচিত নাগেট হ'ল আপনি কোনও সম্পত্তি ফাইল থেকে সিমের বৈশিষ্ট্যগুলিতে মানগুলি ইনজেক্ট করতে @ ভ্যালু টিকাটিও ব্যবহার করতে পারেন। আরও তথ্যের জন্য এই পোস্টটি দেখুন ...

বসন্ত new.০ এ নতুন স্টাফ || শিমের মানগুলি অটোরিয়িং করা || বসন্তে সম্পত্তি মান অটোয়্যারিং


2

আমার জন্য, এটি ছিল @ লাকির উত্তর এবং বিশেষত, লাইন

AutowiredFakaSource fakeDataSource = ctx.getBean(AutowiredFakaSource.class);

থেকে ক্যাপ্টেন ডিবাগ পৃষ্ঠা

যে আমার সমস্যা স্থির। আমার কাছে একটি অ্যাপ্লিকেশন কনটেক্সট-ভিত্তিক অ্যাপ রয়েছে যা কমান্ড-লাইন থেকে চলছে এবং এসও-র বেশ কয়েকটি মন্তব্যে বিচার করে স্প্রিং তারগুলি এমভিসি-ভিত্তিক অ্যাপ্লিকেশনগুলিতে আলাদাভাবে আপ করে।


1

আমি মনে করি শিমের মধ্যে সম্পত্তি ইনজেক্ট করার সবচেয়ে সুবিধাজনক উপায় হ'ল সেটার পদ্ধতি।

উদাহরণ:

package org.some.beans;

public class MyBean {
    Long id;
    String name;

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

শিমের এক্সএমএল সংজ্ঞা:

<bean id="Bean1" class="org.some.beans.MyBean">
    <property name="id" value="1"/>
    <property name="name" value="MyBean"/>
</bean>

প্রতিটি নামক propertyপদ্ধতির setProperty(value)জন্য প্রার্থনা করা হবে।

এই রূপটি বিশেষত সহায়ক যদি আপনার একটি বাস্তবায়নের ভিত্তিতে একাধিক শিমের প্রয়োজন হয়।

উদাহরণস্বরূপ, যদি আমরা এক্সএমএলে আরও একটি শিমের সংজ্ঞা দিই:

<bean id="Bean2" class="org.some.beans.MyBean">
    <property name="id" value="2"/>
    <property name="name" value="EnotherBean"/>
</bean>

তারপরে কোডটি এইভাবে করুন:

MyBean b1 = appContext.getBean("Bean1");
System.out.println("Bean id = " + b1.getId() + " name = " + b1.getName());
MyBean b2 = appContext.getBean("Bean2");
System.out.println("Bean id = " + b2.getId() + " name = " + b2.getName());

ছাপবে

Bean id = 1 name = MyBean
Bean id = 2 name = AnotherBean

সুতরাং, আপনার ক্ষেত্রে এটি দেখতে এইরকম হওয়া উচিত:

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {

    Long maxResults;

    public void setMaxResults(Long maxResults) {
        this.maxResults = maxResults;
    }

    // Now use maxResults value in your code, it will be injected on Bean creation
    public void someMethod(Long results) {
        if (results < maxResults) {
            ...
        }
    }
}

0

আপনার যদি কনফিগারেশনের জন্য আরও নমনীয়তার প্রয়োজন হয় তবে সেটিংস 4 জেপ্লেসহোল্ডার কনফিগারারটি চেষ্টা করুন: http://settings4j.sourceforge.net/currentrelease/configSpringPlaceholder.html

আমাদের প্রয়োগে আমরা ব্যবহার করি:

  • প্রিপ্রড- এবং প্রোড-সিস্টেমটি কনফিগার করার জন্য পছন্দগুলি
  • "এমভিএন জেটি: চালান" এর জন্য পছন্দসমূহ এবং জেএনডিআই এনভায়রনমেন্ট ভেরিয়েবল (জেএনডিআই অগ্রাধিকারগুলি ওভাররাইট করে)
  • ইউনিট টেস্টের জন্য সিস্টেম বৈশিষ্ট্য (@ পূর্বেক্লাস টিকা)

: ডিফল্ট ক্রমে কী-মান-উৎস প্রথম পরীক্ষা করা হয়, বর্ণনা করা হয়
http://settings4j.sourceforge.net/currentrelease/configDefault.html
ক্রমটি এটি আপনার সেটিংস 4j.xML (লগ 4j.xML থেকে সঠিক) এর সাহায্যে কাস্টমাইজ করা যায় ক্লাসপাথ।

আমাকে আপনার মতামত জানতে দিন: settings4j-user@lists.sourceforge.net

বন্ধুত্বপূর্ণ শ্রদ্ধা সহ,
হ্যারাল্ড


-1

স্প্রিংয়ের "প্রপার্টিপ্লেসহোল্ডার কনফিগারার" ক্লাসটি ব্যবহার করুন

সম্পত্তি ফাইল দেখানোর একটি সাধারণ উদাহরণ শিমের সম্পত্তি হিসাবে গতিশীলভাবে পড়া simple

<bean id="placeholderConfig"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>/WEB-INF/classes/config_properties/dev/database.properties</value>
        </list>
    </property> 
</bean>

<bean id="devDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="${dev.app.jdbc.driver}"/>
    <property name="jdbcUrl" value="${dev.app.jdbc.url}"/>
    <property name="user" value="${dev.app.jdbc.username}"/>
    <property name="password" value="${dev.app.jdbc.password}"/>
    <property name="acquireIncrement" value="3"/>
    <property name="minPoolSize" value="5"/>
    <property name="maxPoolSize" value="10"/>
    <property name="maxStatementsPerConnection" value="11000"/>
    <property name="numHelperThreads" value="8"/>
    <property name="idleConnectionTestPeriod" value="300"/>
    <property name="preferredTestQuery" value="SELECT 0"/>
</bean> 

সম্পত্তি ফাইল

dev.app.jdbc.driver = com.mysql.jdbc.Driver

dev.app.jdbc.url = JDBC: MySQL: // স্থানীয় হোস্ট: 3306 / addvertisement

dev.app.jdbc.username = রুট

dev.app.jdbc.password = রুট

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