স্প্রিং বুট এবং একাধিক বাহ্যিক কনফিগারেশন ফাইল


125

আমার একাধিক সম্পত্তি ফাইল রয়েছে যা আমি ক্লাসপথ থেকে লোড করতে চাই। এর অধীনে একটি ডিফল্ট সেট /src/main/resourcesরয়েছে myapp.jar। আমার springcontextপ্রত্যাশা ফাইলগুলি ক্লাসপথে থাকবে। অর্থাত

<util:properties id="Job1Props"
    location="classpath:job1.properties"></util:properties>

<util:properties id="Job2Props"
    location="classpath:job2.properties"></util:properties>

বাহ্যিক সেট সহ এই বৈশিষ্ট্যগুলিকে ওভাররাইড করার জন্য আমারও বিকল্প দরকার। আমার একটি বাহ্যিক কনফিগার ফোল্ডার রয়েছে cwd। বসন্ত বুট হিসাবে ডক কনফিগার ফোল্ডারটি ক্লাসপথে থাকতে হবে। তবে এটি ডক থেকে পরিষ্কার নয় যদি এটি কেবল applicaiton.propertiesসেখান থেকে বা কনফিগের সমস্ত বৈশিষ্ট্যগুলিকে ওভাররাইড করে ।

যখন আমি এটি পরীক্ষা করি তখন কেবল application.propertiesবাছাই করা হয় এবং বাকি সম্পত্তিগুলি এখনও এখান থেকে নেওয়া হয় /src/main/resources। আমি এগুলিকে কমা দ্বারা পৃথক করা তালিকা হিসাবে সরবরাহের চেষ্টা করেছি spring.config.locationকিন্তু ডিফল্ট সেটটি এখনও ওভাররাইড করা হচ্ছে না।

আমি কীভাবে মাল্টিপল বহিরাগত কনফিগারেশন ফাইলগুলি ওভাররাইড ডিফল্টগুলিতে করব?

কার্যক্ষম হিসাবে আমি বর্তমানে ব্যবহার করেছি app.config.location(অ্যাপ্লিকেশন নির্দিষ্ট সম্পত্তি) যা আমি কমান্ড লাইনের মাধ্যমে সরবরাহ করি। অর্থাত

java -jar myapp.jar app.config.location=file:./config

এবং আমি আমার পরিবর্তিত applicationcontextকরতে

<util:properties id="Job2Props"
    location="{app.config.location}/job2.properties"></util:properties>

এবং এইভাবে আমি অ্যাপ্লিকেশন লোড করার সময় ফাইল এবং শ্রেণিপথের মধ্যে পৃথকীকরণ করি।
সম্পাদনাগুলি:

//psuedo code

if (StringUtils.isBlank(app.config.location)) {
            System.setProperty(APP_CONFIG_LOCATION, "classpath:");
}

আমি প্রকৃতপক্ষে উপরের কাজটি ব্যবহার না করা এবং ক্লাসপথে সমস্ত বাহ্যিক কনফিগারেশন ফাইলগুলি ফাইলের মতো করে ওভাররাইড করতে চাই application.properties


4
application.propertiesসবসময় লোড হবে সঙ্গে spring.config.locationআপনি অতিরিক্ত কনফিগারেশন এমন অবস্থানগুলি ফাইলের জন্য চেক করা হয় যোগ করতে পারেন (যেমন যখন এটি একটি দিয়ে শেষ হয় /) তবে যদি আপনি ঐ লোড হবে ফাইলগুলিতে সেখানে যা পয়েন্টে কমা দ্বারা পৃথক করা তালিকা করা। এটি এখানে
গাইডেও

উত্তর:


155

স্প্রিং বুট ব্যবহার করার সময় বৈশিষ্ট্যগুলি নিম্নলিখিত ক্রমে লোড হয় (দেখুন স্প্রিং বুটের রেফারেন্স গাইডে বহিরাগত কনফিগারেশন )।

  1. কমান্ড লাইন আর্গুমেন্ট.
  2. জাভা সিস্টেমের বৈশিষ্ট্য (System.getProperties ())।
  3. ওএস এনভায়রনমেন্ট ভেরিয়েবল।
  4. জাভা থেকে জেএনডিআই বৈশিষ্ট্যগুলি: কমপিউ / এনভিভি
  5. একটি র্যান্ডমভ্যালিউপ্রোপার্টিসোর্স যা কেবল এলোমেলোভাবে বৈশিষ্ট্যযুক্ত। *।
  6. আপনার প্যাকেজড জারের বাইরে অ্যাপ্লিকেশন বৈশিষ্ট্য (ওয়াইএএমএল এবং প্রোফাইল ভেরিয়েন্ট সহ অ্যাপ্লিকেশন.প্রেটিস)।
  7. অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি আপনার জারের অভ্যন্তরে প্যাক করা হয়েছে (ওয়াইএএমএল এবং প্রোফাইল ভেরিয়েন্ট সহ অ্যাপ্লিকেশন.প্রসারণগুলি)।
  8. আপনার @ কনফিগারেশন ক্লাসে @ প্রপার্টিসোর্স টিকা।
  9. ডিফল্ট বৈশিষ্ট্য (স্প্রিং অ্যাপ্লিকেশন.সেটডাফল্টপ্রোপার্টি ব্যবহার করে নির্দিষ্ট করা হয়)।

বৈশিষ্ট্যগুলি সমাধান করার সময় (যেমন @Value("${myprop}") সমাধান করা বিপরীত ক্রমে সম্পন্ন হয় (সুতরাং 9 দিয়ে শুরু করা)।

বিভিন্ন ফাইল যুক্ত করতে আপনি এমন spring.config.locationবৈশিষ্ট্য ব্যবহার করতে পারেন যা সম্পত্তি ফাইল বা ফাইলের অবস্থান (ডিরেক্টরি) এর একটি কমা বিচ্ছিন্ন তালিকা গ্রহণ করে।

-Dspring.config.location=your/config/dir/

উপরের একটিটি একটি ডিরেক্টরি যুক্ত করবে যা application.propertiesফাইলগুলির জন্য পরামর্শ নেওয়া হবে ।

-Dspring.config.location=classpath:job1.properties,classpath:job2.properties

এটি লোড হওয়া ফাইলগুলিতে 2 সম্পত্তি ফাইল যুক্ত করবে।

পূর্বনির্ধারিত কনফিগারেশন ফাইল এবং অবস্থানগুলি অ্যাডিটোনালি নির্দিষ্ট করা ফাইলগুলির আগে লোড spring.config.locationহয় যার অর্থ যে পূর্ববর্তীগুলি সর্বদা পূর্ববর্তী বৈশিষ্ট্যে সেট করা বৈশিষ্ট্যগুলিকে ওভাররাইড করে। (আরো দেখুন এই বিভাগে স্প্রিং বুট রেফারেন্স গাইড এর)।

তাহলে spring.config.locationডিরেক্টরি (যেমন ফাইল উল্টোদিকে) রয়েছে তারা দিয়ে শেষ হওয়া উচিত / (এবং থেকে উত্পন্ন নামের সাথে যোগ করা হবে spring.config.nameলোড হচ্ছে আগে)। ডিফল্ট অনুসন্ধানের পথটি classpath:,classpath:/config,file:,file:config/সর্বদা ব্যবহৃত হয়, এর মান নির্বিশেষে spring.config.location। এইভাবে আপনি আপনার অ্যাপ্লিকেশনটির জন্য ডিফল্ট মান সেট করতে পারেন application.properties(বা আপনি যে কোনও বেসম নাম বেছে নিন spring.config.name) এবং রানটাইম এ ডিফল্ট রেখে আলাদা ফাইল দিয়ে ওভাররাইড করতে পারেন ।

আপডেট: স্প্রিংকনফিগ.লোকেশনের আচরণ এখন যুক্ত করার পরিবর্তে ডিফল্টকে ওভাররাইড করে। ডিফল্ট রাখতে আপনার বসন্তের কনফিগ.অ্যাডিশনাল-অবস্থান ব্যবহার করতে হবে। এটি আচরণের 1.x থেকে 2.x এ পরিবর্তন


2
ধন্যবাদ তবে আমি এই রেফ ডকটি ইতিমধ্যে পড়েছি এবং নিম্নলিখিতটি আমার কাছে বিভ্রান্ত করছে "-Dspring.config.location = আপনার / কনফিগারেশন / দির / উপরের একটিটি একটি ডিরেক্টরি যুক্ত করবে যা অ্যাপ্লিকেশন.প্রপার্টি ফাইলগুলির জন্য পরামর্শ নেওয়া হবে।" এপ্লিকেশন.প্রোপার্টি ফাইলগুলি এর অর্থ কী। এটি কেবল একটি ফাইল। যে কোনও ক্ষেত্রে যদি এটি "/" দিয়ে পুরো ডিরেক্টরিটি অবশেষে বেছে নিতে সক্ষম হয় তবে আমি কমা বিচ্ছিন্ন তালিকা হিসাবে প্রতিটি উল্লেখ করতে চাই না। আমি আমার পোস্টে উল্লিখিত হিসাবে আমি উভয় পদ্ধতির চেষ্টা করেছি বলে মনে করি তবে আমি আরও একবার চেষ্টা করব
nir

হিসাবে ডক বিবৃত জন্য অন্যান্য ডিফল্ট স্থানের মত আলোচনা করা তুলে নেব application.propertiesএবং application-[env].properties। এটি অন্যান্য সম্পত্তি ফাইলগুলিতে বিবেচনা করে না। এটি রেফারেন্স গাইডেও বর্ণিত হয়েছে (বিভাগে লিঙ্কটি নেতৃত্ব দেয় এবং রেফারেন্স গাইডের উদ্ধৃতি)।
এম। ডিনুম

1
হ্যাঁ তবে এটাই আমার কাছে কিছু বোঝায় না ... কেন পুরো ডিরেক্টরিটির পরিবর্তে ক্লাসপথের ডিরেক্টরি থেকে কেবল এক ধরণের ফাইল বিবেচনা করুন। এটি আপনাকে কেবল একটি সম্পত্তি ফাইল ব্যবহার করতে বাধ্য করে যা ভাল ইমো নয়। টমক্যাটের মতো আমি সাধারণ.লোডারকে ক্লাসপথে নির্দিষ্ট ডিরেক্টরি (এবং এটি অন্তর্নিহিত) রাখার জন্য কনফিগার করতে পারি কেন ক্লাসলোডার বুট করতে পারে না কেন এটি সমর্থন করতে পারে।
nir

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

13
এটি আপডেট করা উচিত, কারণ spring.config.locationএখন এর আচরণটি এটির পরিবর্তে ডিফল্টকে ওভাররাইড করে। spring.config.additional-locationডিফল্ট রাখতে আপনার প্রয়োজন । এটি আচরণের 1.x থেকে 2.x এ পরিবর্তন is
রবিন

32

স্প্রিং বুট সহ, স্প্রিং.কনফিগ.লোকেশন কাজ করে, কেবল কমা দ্বারা পৃথক করা বৈশিষ্ট্য ফাইল সরবরাহ করে।

নীচের কোডটি দেখুন

@PropertySource(ignoreResourceNotFound=true,value="classpath:jdbc-${spring.profiles.active}.properties")
public class DBConfig{

     @Value("${jdbc.host}")
        private String jdbcHostName;
     }
}

কেউ jdbc.properties এর ডিফল্ট সংস্করণ প্রয়োগ করতে পারে। বাহ্যিক সংস্করণগুলি এটি নির্ধারণ করা যেতে পারে।

java -jar target/myapp.jar --spring.config.location=classpath:file:///C:/Apps/springtest/jdbc.properties,classpath:file:///C:/Apps/springtest/jdbc-dev.properties

বসন্ত.প্রফাইলস.একটিভ সম্পত্তি ব্যবহার করে প্রোফাইল মান সেটের ভিত্তিতে, jdbc.host এর মানটি নেওয়া হবে। সুতরাং যখন (উইন্ডোতে)

set spring.profiles.active=dev

jdbc.host jdbc-dev.properties থেকে মান নেবে।

জন্য

set spring.profiles.active=default

jdbc.host jdbc.properties থেকে মান নেবে।


আমি বিশ্বাস করি না যে কোড ব্লকগুলির প্রথমটি কাজ করবে। আমি জানি যে আমি এইটিকে নিজের উপর চাপিয়ে দিয়েছিলাম এবং এই উত্তরটি অনুসরণ করেছি । দেখুন jira.springsource.org/browse/SPR-8539 শালীন explenation জন্য উত্তর উল্লেখ।
সোভাকা

27

স্প্রিং বুট 1. এক্স এবং স্প্রিং বুট 2. এক্স এর সম্পর্কে একই বিকল্প এবং আচরণ প্রদান করে না Externalized Configuration

এম। ডেনুমের খুব ভাল উত্তরটি স্প্রিং বুট 1 নির্দিষ্ট করে।
আমি এখানে স্প্রিং বুট 2 এর জন্য আপডেট করব।

পরিবেশগত বৈশিষ্ট্য উত্স এবং আদেশ

স্প্রিং বুট 2 একটি খুব নির্দিষ্ট PropertySourceক্রম ব্যবহার করে যা মানগুলি বোধগম্য ওভাররাইডিংকে মঞ্জুরি দেওয়ার জন্য ডিজাইন করা হয়েছে। বৈশিষ্ট্যগুলি নিম্নলিখিত ক্রমে বিবেচনা করা হয়:

  • আপনার হোম ডিরেক্টরিতে ডিভলটোলস গ্লোবাল সেটিংসের বৈশিষ্ট্য (dev / .spring-boot-devtools.properties যখন ডিভলটুলগুলি সক্রিয় থাকে)।

  • @TestPropertySource আপনার পরীক্ষায় টিকা।

  • @SpringBootTest#propertiesআপনার পরীক্ষাগুলিতে টিকা বিশিষ্টতা। কমান্ড লাইন আর্গুমেন্ট.

  • বৈশিষ্ট্যগুলি SPRING_APPLICATION_JSON(ইনভারলাইন ভেরিয়েবল বা সিস্টেমের সম্পত্তিটিতে এম্বেড ইনসেল জেএসএন)।

  • ServletConfig আরডি পরামিতি।

  • ServletContext আরডি পরামিতি।

  • জেএনডিআই বৈশিষ্ট্য থেকে java:comp/env

  • জাভা সিস্টেমের বৈশিষ্ট্য ( System.getProperties())।

  • ওএস এনভায়রনমেন্ট ভেরিয়েবল।

  • একটি RandomValuePropertySourceযা এলোমেলোভাবে বৈশিষ্ট্যযুক্ত *

  • আপনার প্যাকেজড জারের বাইরে প্রোফাইল-নির্দিষ্ট অ্যাপ্লিকেশন বৈশিষ্ট্য ( application-{profile}.propertiesএবং ওয়াইএএমএল রূপগুলি))

  • প্রোফাইল-নির্দিষ্ট অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি আপনার জারের ভিতরে প্যাকেজযুক্ত ( application-{profile}.propertiesএবং ওয়াইএএমএল রূপগুলি)।

  • আপনার প্যাকেজড জারের বাইরে অ্যাপ্লিকেশন বৈশিষ্ট্য ( application.propertiesএবং ওয়াইএএমএল রূপগুলি)।

  • অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি আপনার জারের ভিতরে প্যাক করা হয়েছে ( application.propertiesএবং ওয়াইএএমএল রূপগুলি)।

  • @PropertySourceআপনার @Configurationক্লাসে টিকা । ডিফল্ট বৈশিষ্ট্য (সেটিংস দ্বারা নির্দিষ্ট SpringApplication.setDefaultProperties)।

বাহ্যিক বৈশিষ্ট্য ফাইলগুলি নির্দিষ্ট করতে এই বিকল্পগুলির মধ্যে আপনার আগ্রহ থাকতে হবে:

  • আপনার প্যাকেজড জারের বাইরে প্রোফাইল-নির্দিষ্ট অ্যাপ্লিকেশন বৈশিষ্ট্য ( application-{profile}.propertiesএবং ওয়াইএএমএল রূপগুলি))

  • আপনার প্যাকেজড জারের বাইরে অ্যাপ্লিকেশন বৈশিষ্ট্য ( application.propertiesএবং ওয়াইএএমএল রূপগুলি)।

  • @PropertySourceআপনার @Configurationক্লাসে টিকা । ডিফল্ট বৈশিষ্ট্য (সেটিংস দ্বারা নির্দিষ্ট SpringApplication.setDefaultProperties)।

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

অ্যাপ্লিকেশন.প্রপার্টি ফাইলগুলির জন্য ডিফল্ট অবস্থান

আমাদের সম্পর্কে application.propertiesফাইল (এবং বৈকল্পিক) ডিফল্ট স্প্রিং লোড তাদের এবং নিম্নলিখিত ক্রমে এগুলো পরিবেশে তাদের বৈশিষ্ট্য যোগ দ্বারা:

  • বর্তমান ডিরেক্টরিটির একটি / কনফিগারেশনের উপ-ডিরেক্টরি

  • বর্তমান ডিরেক্টরি

  • একটি শ্রেণিপথ / কনফিগার প্যাকেজ

  • ক্লাসপাথ মূল

উচ্চতর অগ্রাধিকারগুলি এত আক্ষরিক:
classpath:/,classpath:/config/,file:./,file:./config/

নির্দিষ্ট নাম সহ বৈশিষ্ট্য ফাইল কীভাবে ব্যবহার করবেন?

ডিফল্ট অবস্থানগুলি সর্বদা পর্যাপ্ত থাকে না: ডিফল্ট ফাইলের মতো ডিফল্ট অবস্থানগুলি ( application.properties) পছন্দ না করে। এছাড়াও, ওপি প্রশ্নের মতো আপনাকে application.properties(এবং বৈকল্পিক) ব্যতীত একাধিক কনফিগারেশন ফাইল নির্দিষ্ট করতে হবে ।
সুতরাংspring.config.name যথেষ্ট হবে না।

এই ক্ষেত্রে আপনার spring.config.locationপরিবেশ সম্পত্তি (যা ডিরেক্টরি স্থান বা ফাইল পাথের কমা-বিচ্ছিন্ন তালিকা) ব্যবহার করে একটি স্পষ্ট অবস্থান সরবরাহ করা উচিত ।
ফাইলের নামগুলি সম্পর্কে নিখরচায় থাকার জন্য ডিরেক্টরিগুলির তালিকাতে ফাইল পাথের তালিকার পক্ষে রয়েছে।
উদাহরণস্বরূপ এটি করতে:

java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

এই উপায়টি সর্বাধিক ভারবোজ যা কেবল ফোল্ডারটি নির্দিষ্ট করে তবে এটি আমাদের কনফিগারেশন ফাইলগুলি খুব সূক্ষ্মভাবে নির্দিষ্ট করার এবং কার্যকরভাবে ব্যবহৃত বৈশিষ্ট্যগুলি স্পষ্ট করে ডকুমেন্ট করার উপায়।

স্প্রিং.কনফিগ.লোকেশন এখন ডিফল্ট অবস্থানগুলিতে তাদের পরিবর্তে পরিবর্তিত করে

স্প্রিং বুট 1 এর সাথে spring.config.locationযুক্তিটি বসন্তের পরিবেশে নির্দিষ্ট অবস্থানগুলি যুক্ত করে।
তবে স্প্রিং বুট 2 থেকে, spring.config.locationবসন্তের পরিবেশে নির্দিষ্ট অবস্থানগুলি দ্বারা ডকুমেন্টেশনে বর্ণিত স্প্রিংয়ের দ্বারা ব্যবহৃত ডিফল্ট অবস্থানগুলি প্রতিস্থাপন করে

কাস্টম কনফিগারেশন অবস্থানগুলি ব্যবহার করে কনফিগার করা হয় spring.config.location, তারা ডিফল্ট অবস্থানগুলি প্রতিস্থাপন করে। উদাহরণস্বরূপ, যদি spring.config.locationমান মাধ্যমে কনফিগার করা হয়েছে classpath:/custom-config/, file:./custom-config/, সার্চ অর্ডার নিম্নলিখিত হয়ে:

  1. file:./custom-config/

  2. classpath:custom-config/

spring.config.locationকোনও application.propertiesফাইল স্পষ্টভাবে নির্দিষ্ট করা উচিত তা নিশ্চিত করার এখন একটি উপায় ।
উবার জেআরগুলির জন্য যা প্যাকেজ করার কথা নয়application.properties ফাইল করার , এটি দুর্দান্ত।

spring.config.locationস্প্রিং বুট 2 ব্যবহার করার সময় পুরানো আচরণ ধরে রাখতে আপনি ডকুমেন্টেশনের দ্বারা বর্ণিত অবস্থানগুলি যোগ করার spring.config.additional-locationপরিবর্তে নতুন সম্পত্তিটি ব্যবহার করতে পারেন :spring.config.location

বিকল্পভাবে, কাস্টম কনফিগারেশন অবস্থানগুলি ব্যবহার করে কনফিগার করা হয় spring.config.additional-location, সেগুলি ডিফল্ট অবস্থানগুলি ছাড়াও ব্যবহৃত হয়।


প্রস্তুতিতে

সুতরাং ধরে নেওয়া যায় যে ওপি প্রশ্নের মতোই, আপনার কাছে উল্লেখ করার জন্য 2 টি বাহ্যিক বৈশিষ্ট্য ফাইল এবং উবার জারে অন্তর্ভুক্ত 1 টি বৈশিষ্ট্য ফাইল রয়েছে।

আপনার নির্দিষ্ট করা কনফিগারেশন ফাইলগুলি ব্যবহার করতে:

-Dspring.config.location=classpath:/job1.properties,classpath:/job2.properties,classpath:/applications.properties   

এগুলিতে ডিফল্ট অবস্থানগুলিতে কনফিগারেশন ফাইল যুক্ত করতে:

-Dspring.config.additional-location=classpath:/job1.properties,classpath:/job2.properties

classpath:/applications.properties পূর্ববর্তী উদাহরণে ডিফল্ট লোকেশনগুলির প্রয়োজন হয় না এবং এটি ডিফল্ট অবস্থানগুলি এখানে ওভাররাইট করা হয় না তবে প্রসারিত হয়।


আপনার উত্তরটি একটি জিনিস ব্যতীত সত্যই সম্পূর্ণ: স্প্রিং কোথায় ডিস্কে বহিরাগত কনফিগারেশন জব 1 পাবেন। ক্লাসপথে আপনি কীভাবে আপনার ডিরেক্টরিতে বহিরাগত বৈশিষ্ট্য যুক্ত করেছেন?
ত্রিস্তান

@ ত্রিস্তান, মূলত, বসন্ত application.propertiesসমস্ত প্যারামিটার সহ একটি পড়তে পারে এবং ${file_name}.propertiesআংশিক সংজ্ঞাযুক্ত বৈশিষ্ট্যের সেট সহ একাধিক পড়তে পারে। সুতরাং, আপনি যদি @PropertySourceফাইলগুলি বা অন্যান্য শক্তিশালী লিঙ্কগুলি ব্যবহার করেন তবে আপনি অন্যান্য বাহ্যিক ফাইল তৈরি করতে পারেন এবং সেই বৈশিষ্ট্যগুলিকে ওভাররাইড করতে পারেন (যেমন: থেকে classpath:file.properties)।
মিস্টার_ জেসুস

23

প্রপার্টিপ্লেসহোল্ডার কনফিগারারটি একবার দেখুন, আমি টীকাগুলির চেয়ে আরও পরিষ্কার ব্যবহার করব।

যেমন

@Configuration
public class PropertiesConfiguration {


    @Bean
    public PropertyPlaceholderConfigurer properties() {
        final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
//        ppc.setIgnoreUnresolvablePlaceholders(true);
        ppc.setIgnoreResourceNotFound(true);

        final List<Resource> resourceLst = new ArrayList<Resource>();

        resourceLst.add(new ClassPathResource("myapp_base.properties"));
        resourceLst.add(new FileSystemResource("/etc/myapp/overriding.propertie"));
        resourceLst.add(new ClassPathResource("myapp_test.properties"));
        resourceLst.add(new ClassPathResource("myapp_developer_overrides.properties")); // for Developer debugging.

        ppc.setLocations(resourceLst.toArray(new Resource[]{}));

        return ppc;
    }

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

8

এটি স্প্রিং বুট ব্যবহার করে একটি সহজ পদ্ধতি

TestClass.java

@Configuration
@Profile("one")
@PropertySource("file:/{selected location}/app.properties")
public class TestClass {

    @Autowired
    Environment env;

    @Bean
    public boolean test() {
        System.out.println(env.getProperty("test.one"));
        return true;
    }
}

app.properties কনটেক্সট, আপনার নির্বাচিত অবস্থান

test.one = 1234

আপনার বসন্ত বুট অ্যাপ্লিকেশন

@SpringBootApplication

public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(testApplication.class, args);
    }
}

এবং পূর্বনির্ধারিত অ্যাপ্লিকেশন.সম্পর্কীয় প্রসঙ্গ

spring.profiles.active = one

আপনি নিজের পছন্দমতো কনফিগারেশন ক্লাস লিখতে পারেন এবং কেবল বসন্ত.প্রফাইলস.অ্যাকটিভ সেট করে তাদের সক্ষম / অক্ষম করতে পারেন = প্রোফাইলের নাম / নাম {কমা দ্বারা পৃথক}

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

@Value("${test.one}")
String str;

7

আমারও একই সমস্যা ছিল। আমি স্প্রিং বুট অ্যাপ্লিকেশন.প্রপার্টি সনাক্তকরণের মতো একটি বাহ্যিক ফাইলের সাথে সূচনাতে অভ্যন্তরীণ কনফিগারেশন ফাইলটি ওভাররাইট করার ক্ষমতা পেতে চাইতাম। আমার ক্ষেত্রে এটি একটি ব্যবহারকারীর প্রপার্টি ফাইল যা আমার অ্যাপ্লিকেশন ব্যবহারকারীরা সঞ্চয় করে।

আমার প্রয়োজনীয়তা:

নিম্নলিখিত অবস্থানগুলি থেকে ফাইলটি লোড করুন (এই ক্রমে)

  1. ক্লাসপাথ
  2. বর্তমান ডিরেক্টরিটির একটি / কনফিগারেশন সাবডির।
  3. বর্তমান ডিরেক্টরি
  4. শুরুতে কমান্ড লাইন প্যারামিটার দ্বারা প্রদত্ত ডিরেক্টরি বা একটি ফাইল অবস্থান থেকে

আমি নিম্নলিখিত সমাধান নিয়ে এসেছি:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.PathResource;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.util.Properties;

import static java.util.Arrays.stream;

@Configuration
public class PropertiesConfig {

    private static final Logger LOG = LoggerFactory.getLogger(PropertiesConfig.class);

    private final static String PROPERTIES_FILENAME = "user.properties";

    @Value("${properties.location:}")
    private String propertiesLocation;

    @Bean
    Properties userProperties() throws IOException {
        final Resource[] possiblePropertiesResources = {
                new ClassPathResource(PROPERTIES_FILENAME),
                new PathResource("config/" + PROPERTIES_FILENAME),
                new PathResource(PROPERTIES_FILENAME),
                new PathResource(getCustomPath())
        };
        // Find the last existing properties location to emulate spring boot application.properties discovery
        final Resource propertiesResource = stream(possiblePropertiesResources)
                .filter(Resource::exists)
                .reduce((previous, current) -> current)
                .get();
        final Properties userProperties = new Properties();

        userProperties.load(propertiesResource.getInputStream());

        LOG.info("Using {} as user resource", propertiesResource);

        return userProperties;
    }

    private String getCustomPath() {
        return propertiesLocation.endsWith(".properties") ? propertiesLocation : propertiesLocation + PROPERTIES_FILENAME;
    }

}

এখন অ্যাপ্লিকেশনটি ক্লাসপাথ সংস্থান ব্যবহার করে, তবে অন্যান্য প্রদত্ত স্থানেও একটি সংস্থান অনুসন্ধান করে। সর্বশেষ যে উত্স বিদ্যমান তা বেছে নেওয়া এবং ব্যবহার করা হবে। আমি আমার অ্যাপটি জাভা -জার মাইয়াপ.জার --properties.location = / ডিরেক্টরি / myproperties.properties দিয়ে আমার অ্যাপটি শুরু করতে সক্ষম হলাম এমন একটি বৈশিষ্ট্যের অবস্থান যা আমার নৌকাকে ভাসিয়ে দেয় use

এখানে একটি গুরুত্বপূর্ণ বিবরণ: বৈশিষ্ট্যগুলির জন্য ডিফল্ট মান হিসাবে একটি খালি স্ট্রিং ব্যবহার করুন the সম্পত্তিটি সেট না থাকা অবস্থায় ত্রুটিগুলি এড়াতে @ ভ্যালু টিকাতে লোকেশন l

প্রোপার্টি.লোকেশনের কনভেনশনটি হ'ল প্রোপার্টি.লোকেশন হিসাবে প্রোপার্টি ফাইলের ডিরেক্টরি বা একটি পথ ব্যবহার করুন।

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

আমি নিশ্চিত যে একাধিক ফাইল হ্যান্ডেল করার জন্য এই সমাধানটি বাড়ানো যেতে পারে ...

সম্পাদনা

এখানে একাধিক ফাইলের জন্য আমার সমাধান :) আগের মতো, এটি একটি প্রপার্টিফ্যাক্টরিবিয়ান সাথে একত্রিত করা যেতে পারে।

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.PathResource;
import org.springframework.core.io.Resource;

import java.io.IOException;
import java.util.Map;
import java.util.Properties;

import static java.util.Arrays.stream;
import static java.util.stream.Collectors.toMap;

@Configuration
class PropertiesConfig {

    private final static Logger LOG = LoggerFactory.getLogger(PropertiesConfig.class);
    private final static String[] PROPERTIES_FILENAMES = {"job1.properties", "job2.properties", "job3.properties"};

    @Value("${properties.location:}")
    private String propertiesLocation;

    @Bean
    Map<String, Properties> myProperties() {
        return stream(PROPERTIES_FILENAMES)
                .collect(toMap(filename -> filename, this::loadProperties));
    }

    private Properties loadProperties(final String filename) {
        final Resource[] possiblePropertiesResources = {
                new ClassPathResource(filename),
                new PathResource("config/" + filename),
                new PathResource(filename),
                new PathResource(getCustomPath(filename))
        };
        final Resource resource = stream(possiblePropertiesResources)
                .filter(Resource::exists)
                .reduce((previous, current) -> current)
                .get();
        final Properties properties = new Properties();

        try {
            properties.load(resource.getInputStream());
        } catch(final IOException exception) {
            throw new RuntimeException(exception);
        }

        LOG.info("Using {} as user resource", resource);

        return properties;
    }

    private String getCustomPath(final String filename) {
        return propertiesLocation.endsWith(".properties") ? propertiesLocation : propertiesLocation + filename;
    }

}

সুন্দর কাজ। যে মত জাভা 8 নির্মাণ! যাইহোক আমি এটি ব্যবহার করতে পারছি না কারণ আমার একাধিক প্রপার্টি সিম প্রয়োজন need আপনি যদি আমার সম্পাদনাগুলি দেখতে পান তবে আমার ব্যবহারের ক্ষেত্রে আমার কাজটি অনেকটা অনুরূপ এবং ঝরঝরে।
নীর

আমি একাধিক ফাইলের জন্য একটি সংস্করণ পোস্ট করেছি, কেবলমাত্র সম্পূর্ণতার জন্য;)
এমএক্সএসবি

6

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

আমার স্থানীয় মেশিন অনুসারে কনফিগারেশন সহ অ্যাপ্লিকেশন-লোকাল.প্রোপার্টি ফাইল

spring.profiles.active=local

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=users
spring.data.mongodb.username=humble_freak
spring.data.mongodb.password=freakone

spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672

rabbitmq.publish=true

একইভাবে, আমরা যতগুলি সম্পত্তি ফাইল চাই প্রয়োগ করতে পারেন - অ্যাপ্লিকেশন-প্রড.পার্পের্টি এবং অ্যাপ্লিকেশন- ka.properties

তারপরে বিভিন্ন পরিবেশের জন্য অ্যাপ্লিকেশন শুরু করতে কিছু স্ক্রিপ্ট লিখুন, যেমন

mvn spring-boot:run -Drun.profiles=local
mvn spring-boot:run -Drun.profiles=qa
mvn spring-boot:run -Drun.profiles=prod

5

আমি ঠিক এটির সাথে একইরকম সমস্যা পেয়েছি এবং শেষ পর্যন্ত কারণটি খুঁজে পেয়েছি: অ্যাপ্লিকেশন rop প্রপার্টি ফাইলটিতে ভুল মালিকানা এবং rwx বৈশিষ্ট্য ছিল। সুতরাং যখন টমক্যাটটি অ্যাপ্লিকেশন শুরু করেছিল rop ব্যক্তিগত ফাইলটি সঠিক জায়গায় ছিল তবে অন্য ব্যবহারকারীর মালিকানাধীন:

$ chmod 766 application.properties

$ chown tomcat application.properties

আমার মনে হয় আমারও একই সমস্যা আছে। আমি অপ্ট ফোল্ডারে টমক্যাট ইনস্টল করেছি। আপনি আপনার আবেদন ফাইলটি কোথায় রেখেছিলেন? আমারও কি ফোল্ডার বৈশিষ্ট্যগুলি পরিবর্তন করা উচিত?
anakin59490

3

@ এমএক্সএসবি সমাধানের একটি পরিবর্তিত সংস্করণ যা আমাদের একাধিক ফাইল সংজ্ঞায়িত করতে দেয় এবং আমার ক্ষেত্রে এগুলি হ'ল yML ফাইল।

আমার অ্যাপ্লিকেশন-ডেভ.আইএমএল-এ, আমি এই কনফিগারটি যুক্ত করেছি যা আমাকে সেগুলির মধ্যে -ডিভ.আইএমএলযুক্ত সমস্ত ইউটিএল ইনজেক্ট করতে দেয়। এটি নির্দিষ্ট ফাইলগুলির একটি তালিকাও হতে পারে। "ক্লাসপাথ: /test/test.yml,classpath: /test2/test.yml"

application:
  properties:
    locations: "classpath*:/**/*-dev.yml"

এটি একটি বৈশিষ্ট্যের মানচিত্র পেতে সহায়তা করে।

@Configuration

public class PropertiesConfig {

private final static Logger LOG = LoggerFactory.getLogger(PropertiesConfig.class);

@Value("${application.properties.locations}")
private String[] locations;

@Autowired
private ResourceLoader rl;

@Bean
Map<String, Properties> myProperties() {
    return stream(locations)
            .collect(toMap(filename -> filename, this::loadProperties));
}

private Properties loadProperties(final String filename) {

    YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
    try {
        final Resource[] possiblePropertiesResources = ResourcePatternUtils.getResourcePatternResolver(rl).getResources(filename);
        final Properties properties = new Properties();
        stream(possiblePropertiesResources)
                .filter(Resource::exists)
                .map(resource1 -> {
                    try {
                        return loader.load(resource1.getFilename(), resource1);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }).flatMap(l -> l.stream())
                .forEach(propertySource -> {
                    Map source = ((MapPropertySource) propertySource).getSource();
                    properties.putAll(source);
                });

        return properties;
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
}

যাইহোক, যদি আমার ক্ষেত্রে পছন্দ হয় তবে আমি প্রতিটি প্রোফাইলের জন্য yML ফাইলগুলি বিভক্ত করতে এবং সেগুলি লোড করতে এবং সিমের সূচনা করার আগে সরাসরি বসন্তের কনফিগারেশনে ইনজেকশন করতে চেয়েছিলাম।

config
    - application.yml
    - application-dev.yml
    - application-prod.yml
management
    - management-dev.yml
    - management-prod.yml

... আপনি ধারণা পাবেন

উপাদানটি কিছুটা আলাদা

@Component
public class PropertiesConfigurer extends     PropertySourcesPlaceholderConfigurer
    implements EnvironmentAware, InitializingBean {

private final static Logger LOG = LoggerFactory.getLogger(PropertiesConfigurer.class);

private String[] locations;

@Autowired
private ResourceLoader rl;
private Environment environment;

@Override
public void setEnvironment(Environment environment) {
    // save off Environment for later use
    this.environment = environment;
    super.setEnvironment(environment);
}

@Override
public void afterPropertiesSet() throws Exception {
    // Copy property sources to Environment
    MutablePropertySources envPropSources = ((ConfigurableEnvironment) environment).getPropertySources();
    envPropSources.forEach(propertySource -> {
        if (propertySource.containsProperty("application.properties.locations")) {
            locations = ((String) propertySource.getProperty("application.properties.locations")).split(",");
            stream(locations).forEach(filename -> loadProperties(filename).forEach(source ->{
                envPropSources.addFirst(source);
            }));
        }
    });
}


private List<PropertySource> loadProperties(final String filename) {
    YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
    try {
        final Resource[] possiblePropertiesResources = ResourcePatternUtils.getResourcePatternResolver(rl).getResources(filename);
        final Properties properties = new Properties();
        return stream(possiblePropertiesResources)
                .filter(Resource::exists)
                .map(resource1 -> {
                    try {
                        return loader.load(resource1.getFilename(), resource1);
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }).flatMap(l -> l.stream())
                .collect(Collectors.toList());
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

}


3

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

java -jar yourApp.jar --spring.profiles.active="override" --spring.config.location="file:/tmp/,classpath:/" 

বসন্তকনফিগ.লোকেশনের অধীনে বর্ণিত মানগুলি বিপরীত ক্রমে মূল্যায়ন করা হয়। সুতরাং, আমার উদাহরণে, ক্লাসপ্যাটটি প্রথমে মূল্যায়ন করা হয়, তারপরে ফাইলের মান।

যদি জার ফাইল এবং "অ্যাপ্লিকেশন-override.properties" ফাইলটি বর্তমান ডিরেক্টরিটিতে থাকে তবে আপনি আসলে ব্যবহার করতে পারেন

java -jar yourApp.jar --spring.profiles.active="override"

যেহেতু স্প্রিং বুট আপনার জন্য সম্পত্তি ফাইলটি খুঁজে পাবে


1
এটি বসন্তকে "ওভাররাইড" প্রোফাইলটিকে আপনার সক্রিয় প্রোফাইল হিসাবে ব্যবহার করতে বলবে; এটি অবশ্যই অ্যাপ্লিকেশন.এইএমএল বা অ্যাপ্লিকেশন.প্রোপার্টি ফাইলগুলিতে নির্দিষ্ট করা মানকে
ছাড়িয়ে যাবে

এটি কোনও কনফিগার ফাইল ফাইলের জন্য ফোল্ডারের ভিতরে দেখতে পাবেন। আমার বা আমার ব্যক্তিগত ক্ষেত্রে .আপনি কেবলমাত্র প্রোফাইল-প্রোফাইল রেখেছি l তবে এটি সঠিকভাবে গ্রহণ করবে, ধন্যবাদ @ অ্যাকারুচি এটি একটি দুর্দান্ত ট্রিপ ছিল
আহমেদ সালেম

0

আমি এটি অনুসরণ করার জন্য একটি দরকারী প্যাটার্ন হিসাবে পেয়েছি:

@RunWith(SpringRunner)
@SpringBootTest(classes = [ TestConfiguration, MyApplication ],
        properties = [
                "spring.config.name=application-MyTest_LowerImportance,application-MyTest_MostImportant"
                ,"debug=true", "trace=true"
        ]
)

এখানে আমরা "অ্যাপ্লিকেশন-মাইস্টেস্ট_লওয়ারআইপার্পট্যান্স.আইএমএল" এবং "অ্যাপ্লিকেশন-মাইস্টেস্ট_মস্টিম্পোর্ট্যান্ট.আইএমএল" ব্যবহার করতে "অ্যাপ্লিকেশন.আইএমএল" এর ব্যবহারকে ওভাররাইড করি
( ফাইলগুলিও সন্ধান করবে)

অতিরিক্ত বোনাস হিসাবে অন্তর্ভুক্ত হ'ল পৃথক লাইনে ডিবাগ এবং ট্রেস সেটিংস, যাতে প্রয়োজন হলে আপনি তাদের মন্তব্য করতে পারেন;]

ডিবাগ / ট্রেস অবিশ্বাস্যভাবে কার্যকর কারণ স্প্রিং তার দ্বারা লোড হওয়া সমস্ত ফাইল এবং এটি লোড করার চেষ্টা করে এমন সমস্ত ফাইলের নাম ডাম্প করবে।
রানটাইমের সময় কনসোলে আপনি এর মতো লাইন দেখতে পাবেন:

TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_MostImportant.properties' (file:./config/application-MyTest_MostImportant.properties) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_MostImportant.xml' (file:./config/application-MyTest_MostImportant.xml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_MostImportant.yml' (file:./config/application-MyTest_MostImportant.yml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_MostImportant.yaml' (file:./config/application-MyTest_MostImportant.yaml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_LowerImportance.properties' (file:./config/application-MyTest_LowerImportance.properties) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_LowerImportance.xml' (file:./config/application-MyTest_LowerImportance.xml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_LowerImportance.yml' (file:./config/application-MyTest_LowerImportance.yml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_LowerImportance.yaml' (file:./config/application-MyTest_LowerImportance.yaml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_MostImportant.properties' (file:./application-MyTest_MostImportant.properties) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_MostImportant.xml' (file:./application-MyTest_MostImportant.xml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_MostImportant.yml' (file:./application-MyTest_MostImportant.yml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_MostImportant.yaml' (file:./application-MyTest_MostImportant.yaml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_LowerImportance.properties' (file:./application-MyTest_LowerImportance.properties) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_LowerImportance.xml' (file:./application-MyTest_LowerImportance.xml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_LowerImportance.yml' (file:./application-MyTest_LowerImportance.yml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./application-MyTest_LowerImportance.yaml' (file:./application-MyTest_LowerImportance.yaml) resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_MostImportant.properties' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_MostImportant.xml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_MostImportant.yml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_MostImportant.yaml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_LowerImportance.properties' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_LowerImportance.xml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_LowerImportance.yml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/config/application-MyTest_LowerImportance.yaml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/application-MyTest_MostImportant.properties' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/application-MyTest_MostImportant.xml' resource not found
DEBUG 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Loaded config file 'file:/Users/xxx/dev/myproject/target/test-classes/application-MyTest_MostImportant.yml' (classpath:/application-MyTest_MostImportant.yml)
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/application-MyTest_MostImportant.yaml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/application-MyTest_LowerImportance.properties' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/application-MyTest_LowerImportance.xml' resource not found
DEBUG 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Loaded config file 'file:/Users/xxx/dev/myproject/target/test-classes/application-MyTest_LowerImportance.yml' (classpath:/application-MyTest_LowerImportance.yml)
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'classpath:/application-MyTest_LowerImportance.yaml' resource not found
TRACE 93941 --- [   main] o.s.b.c.c.ConfigFileApplicationListener  : Skipped config file 'file:./config/application-MyTest_MostImportant-test.properties' (file:./config/application-MyTest_MostImportant-test.properties) resource not found

-1

এটি বের করার চেষ্টা করার সময় আমি অনেকগুলি সমস্যার মধ্যে পড়েছিলাম। এখানে আমার সেটআপ,

দেব এনভ: উইন্ডোজ 10, জাভা: 1.8.0_25, স্প্রিং বুট: 2.0.3.আরলেস, স্প্রিং: 5.0.7. রিলিজ

আমি যা পেয়েছি তা বসন্তটি "কনফিগারেশনের জন্য সংবেদনশীল ডিফল্ট" ধারণার সাথে লেগে রয়েছে। এটি এর মধ্যে যেটি অনুবাদ করে তা হ'ল আপনার যুদ্ধ ফাইলের অংশ হিসাবে আপনার সমস্ত সম্পত্তি ফাইল থাকতে হবে। সেখানে একবার প্রবেশ করার পরে, আপনি তাদের "--spring.config.additional- লোকেশন" কমান্ড লাইন সম্পত্তি ব্যবহার করে বাহ্যিক সম্পত্তি ফাইলগুলিতে নির্দেশ করতে ওভাররাইড করতে পারেন। তবে সম্পত্তি ফাইলগুলি মূল যুদ্ধের ফাইলের অংশ না হলে এটি কাজ করবে না।

ডেমো কোড: https://github.com/gselvara/spring-boot-property-demo/tree/master

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