একাধিক প্রকল্প / মডিউলগুলিতে একাধিক সম্পত্তি ফাইল (সম্পত্তি প্লেসোল্ডার কনফিগারারের মাধ্যমে) ব্যবহার করা


104

আমরা বর্তমানে একটি অ্যাপ্লিকেশন লিখছি যা একাধিক প্রকল্প / মডিউলগুলিতে বিভক্ত। উদাহরণস্বরূপ, আসুন নিম্নলিখিত মডিউলগুলি নেওয়া যাক:

  • myApp-দাও
  • myApp-Jabber

প্রতিটি মডিউলের নিজস্ব স্প্রিং প্রসঙ্গ xML ফাইল রয়েছে। ডিএও মডিউলের জন্য আমার একটি প্রপার্টিপ্লেসহোল্ডার কনফিগারার রয়েছে যা প্রয়োজনীয় ডিবি সংযোগ পরামিতি সহ একটি সম্পত্তি ফাইল পড়ে reads জ্যাবার মডিউলটিতে আমার সাথে জাবার সংযোগের বৈশিষ্ট্যগুলির জন্য একটি সম্পত্তি প্লেসহোল্ডার কনফিগারারও রয়েছে।

এখন আসবে মূল অ্যাপ্লিকেশনটিতে যা আমার অ্যাপ্লিকেশন-ডিএও এবং মাই অ্যাপ-জ্যাবার অন্তর্ভুক্ত রয়েছে। এটি সমস্ত প্রসঙ্গ ফাইলগুলি পড়ে এবং একটি বড় স্প্রিং প্রসঙ্গ শুরু করে। দুর্ভাগ্যবশত এটিকে দেখে মনে হচ্ছে যে প্রসঙ্গ অনুযায়ী কেবলমাত্র একটি সম্পত্তি প্লেসহোল্ডার কনফিগারার থাকতে পারে, সুতরাং যে কোনও মডিউলটি প্রথমে লোড হয়ে যায় এটি সংযোগের পরামিতিগুলি পড়তে সক্ষম। অন্যটি "স্থানধারক 'জ্যাবারহোস্ট' এর সমাধান করতে পারেনি" এর মতো একটি ত্রুটিযুক্ত একটি ব্যতিক্রম ছুঁড়ে rows

আমি সমস্যাটি কী তা বুঝতে পারি, তবে আমি আসলেই কোনও সমাধান জানি না - বা আমার ব্যবহারের জন্য সর্বোত্তম অনুশীলন।

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

স্ট্যাকওভারফ্লো সম্প্রদায় থেকে সমাধান / ধারণা সম্পর্কে শুনতে আগ্রহী আমি ..

উত্তর:


182

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

<context:property-placeholder
location="classpath:dao.properties,
          classpath:services.properties,
          classpath:user.properties"
ignore-unresolvable="true"/>

অথবা

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:dao.properties</value>
                <value>classpath:services.properties</value>
                <value>classpath:user.properties</value>
            </list>
        </property> 
        <property name="ignoreUnresolvablePlaceholders" value="true"/>
    </bean>


2
ধন্যবাদ!! উপেক্ষা-অলক্ষণযোগ্য = "সত্য" হ'ল আমার প্রয়োজনটি ঠিক তাই ছিল এবং এটি কৌশলটি করেছিল!
666

1
আপনি যদি 1 টি ট্যাগে সমস্ত ফাইল যুক্ত করেন তবে ইভেন্টের প্রয়োজন হবে না ignore-unresolvable="true", অন্যথায় প্রয়োজন নেই।
এরিক ওয়াং

আপনি কি এর অর্থ ব্যাখ্যা করতে পারেন ignoreUnresolvablePlaceholders? অদৃশ্যযোগ্য স্থানধারীরা কী কী?
এমেরালদিউ

PropertySourcesPlaceholderConfigurerস্প্রিং ৩.১ এর পর থেকে এটি ডিফল্ট ব্যাকিং বাস্তবায়ন, সুতরাং এটি PropertyPlaceholderConfigurerশিম বাস্তবায়ন শ্রেণীর পরিবর্তে ব্যবহার করা বুদ্ধিমান ।
জিহোর

18

আমি জানি যে এটি একটি পুরানো প্রশ্ন, তবে ignore-unresolvableসম্পত্তিটি আমার পক্ষে কাজ করছে না এবং আমি কেন জানি না।

সমস্যাটি ছিল আমার একটি বাহ্যিক সংস্থান প্রয়োজন (যেমন কিছু location="file:${CATALINA_HOME}/conf/db-override.properties") এবং ignore-unresolvable="true"এই ক্ষেত্রে কাজটি করে না।

নিখোঁজ বাহ্যিক সংস্থান উপেক্ষা করার জন্য যা করা দরকার তা হ'ল:

ignore-resource-not-found="true"

এই ক্ষেত্রে যদি অন্য কেউ বাধা দেয়।


3
ignore-unresolvableএবং ignore-resource-not-foundবিভিন্ন উদ্দেশ্যে পরিবেশন। সম্পত্তি ফাইল উপস্থিত না থাকলে ত্রুটিগুলি রোধ করতে , ব্যবহার করুন ignore-resource-not-found="true"। ত্রুটি রোধ করতে আপনি যখন এমন কোনও সম্পত্তি ব্যবহার করেন যা ফাইলে বিদ্যমান নেই , ব্যবহার করুন ignore-unresolvable="true"। আপনার যদি একাধিক ফাইল থাকে যা প্রত্যেকের বৈশিষ্ট্যের আংশিক সেট থাকে এবং প্রতিটি ফাইল থাকতে পারে বা নাও থাকতে পারে তবে আপনার উভয়টিকেই ব্যবহার করতে হবে।
ডাটগুই

8

আপনার <context:property-placeholder />একাধিক বৈশিষ্ট্যপ্লেসহোল্ডার কনফিগুরিয়ার মটরশুটি সুস্পষ্টভাবে ঘোষণার পরিবর্তে একাধিক উপাদান থাকতে পারে ।


আমি দুটি <প্রসঙ্গ: সম্পত্তি-স্থানধারক /> উপাদান ব্যবহার করার চেষ্টা করেছি এবং বসন্ত অভিযোগ করেছে যে এটি নির্দিষ্ট করা সম্পত্তিটি সনাক্ত করতে পারে না। এটি কাজ করার জন্য আমাকে গ্রহণযোগ্য উত্তরটি প্রয়োগ করতে হবে।
মুশি

4

PropertiesPlaceholderConfigurerশিম একটি বিকল্প সম্পত্তি "propertiesArray" বলা হয়েছে। "বৈশিষ্ট্য" বৈশিষ্ট্যের পরিবর্তে এটি ব্যবহার করুন এবং কোনও <array>সম্পত্তি রেফারেন্স সহ এটি কনফিগার করুন ।


2

আমি নীচের সমাধানটি চেষ্টা করেছিলাম, এটি আমার মেশিনে কাজ করে।

<context:property-placeholder location="classpath*:connection.properties" ignore-unresolvable="true" order="1" />

<context:property-placeholder location="classpath*:general.properties" order="2"/>

বসন্ত প্রসঙ্গে একাধিক উপাদান উপস্থিত থাকলে কয়েকটি সেরা অভ্যাস অনুসরণ করা উচিত:

ক্রমটি ঠিক করার জন্য অর্ডার অ্যাট্রিবিউটটি নির্দিষ্ট করা দরকার যেখানে এই স্প্রিংয়ের মাধ্যমে প্রক্রিয়া করা হয় সমস্ত সম্পত্তি স্থানধারককে বিয়োগফলটি সর্বনিম্ন (সর্বোচ্চ আদেশ) ignore-unresolvable=”true”ব্যতীত কোনও ব্যতিক্রম ছাড়াই রেজোলিউশন ব্যবস্থাটিকে অন্যের কাছে যেতে দেয় allow

সূত্র: http://www.baeldung.com/2012/02/06/properties-with-spring/


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