স্প্রিং এক্সএমএলে কোনও ডিফল্ট সম্পত্তি মান নির্দিষ্ট করার কোনও উপায় আছে কি?


92

আমরা আমাদের স্প্রিং কনফিগারেশনে জাভা বৈশিষ্ট্যগুলি ব্যবহার করতে একটি প্রপার্টিপ্লেসহোল্ডার কনফিগারার ব্যবহার করছি ( বিশদ এখানে )

যেমন:

<foo name="port">
  <value>${my.server.port}</value>
</foo>

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

উত্তর:


14

আপনি কি এখানে ডকুমেন্টেড সম্পত্তি ওভাররাইড কনফিগারার সন্ধান করছেন?

http://static.springsource.org/spring/docs/2.5.x/references/beans.html#beans- ف্যাক্টরি- ওভাররিডেকনফিগুরে

আর্টস ফ্যাক্টরি পোস্ট প্রসেসর প্রপার্টি ওভাররিডকনফিগুরার প্রপার্টিপ্লেসহোল্ডার কনফিগারারের সাথে সমান, তবে পরবর্তীগুলির বিপরীতে, মূল সংজ্ঞাগুলির শিমের বৈশিষ্ট্যগুলির জন্য ডিফল্ট মান বা কোনও মান থাকতে পারে না। যদি একটি ওভাররাইডিং প্রপার্টি ফাইলের কোনও নির্দিষ্ট বিনের সম্পত্তিটির জন্য এন্ট্রি না থাকে তবে ডিফল্ট প্রসঙ্গের সংজ্ঞা ব্যবহৃত হয়।


কেউ কি আমাকে বোঝাতে পারেন যে কী 18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA? আমি নিশ্চিত অন্য সবাই জানে এবং আমি কেবল বোকা, তবে কেবল ...
শ্রীধর সারনোবাত

277

স্প্রিং 3 ${my.server.port:defaultValue}সিনট্যাক্স সমর্থন করে।


8
কেবলমাত্র রেফারেন্সের জন্য: SPR-4785
কিউবাচান

11
আমার জন্য, সম্পত্তিটি সংজ্ঞায়িত করা হয় বা না হয় তা সর্বদা ডিফল্ট মান সহ সম্পত্তিটিকে ওভাররাইড করে।
ওন্দ্রেজ বোজেক

13
@ ওন্দ্রেজবোজেক - (একটি পুরাতন পোস্টটিকে টুকরো টুকরো করায় আমি দুঃখিত) আমি একই সমস্যাটি দেখতে পাচ্ছি, স্প্রিং ফ্রেমওয়ার্ক ইস্যুটি দেখুন [ jira.spring.io/browse/SPR-9989] । যেখানে একাধিক স্থানধারক কনফিগারার জড়িত রয়েছে, সেখানে ':' স্বরলিপি দিয়ে নির্দিষ্ট করা ডিফল্ট মানগুলি কেবল চেইনের প্রথম স্থানধারক কনফিগার দ্বারা সমাধান করা হয়। সুতরাং যদি প্রথম কনফিগারারের সম্পত্তি না থাকে তবে সম্পত্তিটি সর্বদা ডিফল্ট মানতে সেট করা থাকবে, এমনকি যদি আরও চেইনের নিচে কনফিগারকারীদেরও সম্পত্তি থাকে। [দেখুন stackoverflow.com/a/22452984/599609]
টোন

4
এটি ${my.server.port:-defaultValue}একই ফলাফল দেয় বলে মনে হয়, " :-" এর বিপরীতে " " নোট করুন :
ক্যাপ্টেন ম্যান

4
<context:property-placeholder/>এটি কাজ করার জন্য আপনাকে যুক্ত করতে হবে, বা একটিPropertyPlaceholderConfigurer
shuckc

34

একটি সামান্য জ্ঞাত বৈশিষ্ট্য রয়েছে যা এটি আরও উন্নত করে। আপনি হার্ড-কোডডের পরিবর্তে কনফিগারযোগ্য ডিফল্ট মান ব্যবহার করতে পারেন, এখানে একটি উদাহরণ রয়েছে:

config.properties:

timeout.default=30
timeout.myBean=60

প্রসঙ্গ.এক্সএমএল:

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

<bean id="myBean" class="Test">
    <property name="timeout" value="${timeout.myBean:${timeout.default}}" />
</bean>

পরে সহজেই ওভাররাইড করতে সক্ষম হওয়ার সময় ডিফল্টটি ব্যবহার করতে, কনফিগারেশনে এইটি করুন:

timeout.myBean = ${timeout.default}

এটি আমার পক্ষে কাজ করেছে ${timeout.myBean:${timeout.default}}। এটি আমার ডিফল্টটিকেও পরিবর্তনশীল হতে দেয়।
নিউস্টেস্ট্যাক ওভারফ্লো ব্যবহারকারী


11

ডিফল্ট মানটি :সম্পত্তি কী পরে যেমন অনুসরণ করা যেতে পারে

<property name="port" value="${my.server.port:8080}" />

বা জাভা কোডে:

@Value("${my.server.port:8080}")
private String myServerPort;

দেখা:

বিটিডাব্লু, এলভিস অপারেটরটি কেবল স্প্রিং এক্সপ্রেশন ল্যাঙ্গুয়েজে (স্পেল) এর মধ্যে পাওয়া যায়,
যেমন: https://stackoverflow.com/a/37706167/537554


9

http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html উল্লেখ করে যে বিনের সাথে সংজ্ঞায়িত "স্থানীয় সম্পত্তি" ফাইল থেকে পঠিত মানগুলির দ্বারা ওভাররাইড হওয়া ডিফল্ট হিসাবে বিবেচিত হবে:

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  <property name="location"><value>my_config.properties</value></property>  
  <property name="properties">  
    <props>  
      <prop key="entry.1">123</prop>  
    </props>  
  </property>  
</bean> 

thx, বসন্ত জাভাডক সম্পর্কে যে শব্দ ছিল, কিন্তু আমি এটি করতে কিভাবে বুঝতে সক্ষম ছিল না!
গিলাইম

0

এছাড়াও আমি অন্য একটি সমাধান খুঁজে পাই যা আমার পক্ষে কাজ করে। আমাদের উত্তরাধিকারের বসন্ত প্রকল্পে আমরা আমাদের ব্যবহারকারীদের নিজস্ব কনফিগারেশন ব্যবহারের সম্ভাবনা দেওয়ার জন্য এই পদ্ধতিটি ব্যবহার করি:

<bean id="appUserProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="ignoreResourceNotFound" value="false"/>
    <property name="locations">
        <list>
            <value>file:./conf/user.properties</value>
        </list>
    </property>
</bean>

এবং এই বৈশিষ্ট্য অ্যাক্সেস করার জন্য আমাদের কোডে এমন কিছু লিখতে হবে:

@Value("#{appUserProperties.userProperty}")
private String userProperty

এবং যদি কোনও পরিস্থিতি দেখা দেয় যখন আপনাকে নতুন সম্পত্তি যুক্ত করতে হবে তবে এখনই আপনি উত্পাদন ব্যবহারকারীকে এটির সাথে যুক্ত করতে চান না যখন আপনার সমস্ত পরীক্ষার বিষয়গুলি প্যাচ করার দরকার হয় বা আপনার অ্যাপ্লিকেশনটি ব্যর্থ হয় will সূচনা

এই সমস্যাটি পরিচালনা করতে আপনি পরবর্তী বাক্য গঠনটি একটি ডিফল্ট মান যুক্ত করতে ব্যবহার করতে পারেন:

@Value("#{appUserProperties.get('userProperty')?:'default value'}")
private String userProperty

এটা আমার জন্য একটি সত্য আবিষ্কার ছিল।

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