কীভাবে আপনি বসন্তে প্রোগ্রামিয়ালি বর্তমান সক্রিয় / ডিফল্ট পরিবেশ প্রোফাইল পাবেন?


155

আমার বর্তমানের বিভিন্ন পরিবেশের প্রোফাইলের উপর ভিত্তি করে বিভিন্ন যুক্তি কোড করতে হবে। আপনি কীভাবে স্প্রিং থেকে বর্তমান সক্রিয় এবং ডিফল্ট প্রোফাইল পেতে পারেন?


3
@ অ্যাভিগোল্ড: বসন্ত ৩.১-এ চলমান সক্রিয় / ডিফল্ট পরিবেশ প্রোফাইলটি প্রোগ্রামক্রমে করুন। আপনার আর কি বিস্তারিত প্রয়োজন?
বোবো

উত্তর:


225

আপনি স্বায়ত্তশক্তি নিতে পারেন Environment

@Autowired
Environment env;

Environment অফার:


6
অ-বসন্ত-পরিচালিত ক্লাসগুলিতে স্থির পদ্ধতিতে আমি কীভাবে এই জাতীয় জিনিস পেতে পারি ?
এথেরাস

75

ব্যবহারকারী 1648825 এর দুর্দান্ত সহজ উত্তর প্রসারিত করা (আমি মন্তব্য করতে পারি না এবং আমার সম্পাদনা প্রত্যাখ্যান করা হয়েছিল):

@Value("${spring.profiles.active}")
private String activeProfile;

কোনও প্রোফাইল সেট না করা থাকলে (আমি একটি নাল মান পাই) এটি একটি অবৈধআর্গুমেন্ট এক্সেক্সশন ফেলে দিতে পারে। আপনার যদি এটি সেট করার প্রয়োজন হয় তবে এটি একটি ভাল জিনিস হতে পারে; @ ভ্যালু'র জন্য 'ডিফল্ট' সিনট্যাক্স ব্যবহার না করে, যেমন:

@Value("${spring.profiles.active:Unknown}")
private String activeProfile;

... সক্রিয়প্রোফাইলে এখন 'অজানা' রয়েছে যদি স্প্রিং.প্রোফিলস.একটিভ সমাধান না করা যায়


প্রোফাইলের নামগুলি কমা দ্বারা পৃথক করা হয়। চেকআউট baeldung.com/spring-profiles#2- using
জেসন

56

এখানে আরও একটি সম্পূর্ণ উদাহরণ।

অটোয়ার এনভায়রনমেন্ট

প্রথমে আপনি পরিবেশ বিনের স্বায়ত্তশাসন করতে চাইবেন।

@Autowired
private Environment environment;

অ্যাক্টিভ প্রোফাইলগুলিতে প্রোফাইল বিদ্যমান কিনা তা পরীক্ষা করুন

তারপরে আপনি getActiveProfiles()সক্রিয় প্রোফাইলের তালিকায় প্রোফাইলটি বিদ্যমান কিনা তা জানতে এটি ব্যবহার করতে পারেন । এখানে এমন উদাহরণ রয়েছে যা String[]থেকে নেওয়া হয় getActiveProfiles(), সেই অ্যারে থেকে একটি স্ট্রিম পাওয়া যায়, তারপরে একাধিক প্রোফাইল (কেস-সংবেদনশীল) যাচাইয়ের জন্য ম্যাচার্স ব্যবহার করে যা তাদের উপস্থিত থাকলে একটি বুলিয়ান দেয় returns

//Check if Active profiles contains "local" or "test"
if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
   env -> (env.equalsIgnoreCase("test") 
   || env.equalsIgnoreCase("local")) )) 
{
   doSomethingForLocalOrTest();
}
//Check if Active profiles contains "prod"
else if(Arrays.stream(environment.getActiveProfiles()).anyMatch(
   env -> (env.equalsIgnoreCase("prod")) )) 
{
   doSomethingForProd();
}

আপনি এন্টোটেশন @Profile("local")প্রোফাইল ব্যবহার করে অনুরূপ কার্যকারিতা অর্জন করতে পারেন কোনও পাস-ইন বা পরিবেশ প্যারামিটারের উপর ভিত্তি করে নির্বাচনী কনফিগারেশনের অনুমতি দেয়। এই কৌশল সম্পর্কে আরও তথ্য এখানে: স্প্রিং প্রোফাইল


2
@ প্রোফাইলে মনে হয় সেরা সমাধান।
পল ওয়াল্ডো

আমি প্রতিটি কোঁকড়া ধনুর্বন্ধনী জন্য পৃথক লাইন দ্বারা অন্ধ হয়েছি। জাভা কোডিং মান নয়।
ব্যবহারকারী 1567291

26
@Value("${spring.profiles.active}")
private String activeProfile;

এটি কাজ করে এবং আপনার এনভায়রনমেন্টওয়্যার প্রয়োগের দরকার নেই। তবে আমি এই পদ্ধতির ত্রুটিগুলি জানি না।


3
এই লাইনটি এই ত্রুটিটি দেয়:Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in value "${spring.profiles.active}"
zygimantus

আমার জন্য পুরোপুরি কাজ করে। স্প্রিং বুট 1.5.15 ব্যবহার করে।
рüффп

আমি মনে করি যদি প্রোফাইলটি সংজ্ঞায়িত করা হয় তবে মানটিকে বিশ্লেষণ করা হবে, অন্যথায় ব্যতিক্রম ঘটে। সব পরিস্থিতিতে ফিট করে না।
ওয়েস্টার্নগুন

1
সক্রিয় প্রোফাইলও একটি অ্যারে হতে পারে, দয়া করে এটি মনোযোগ দিন। এই জাতীয় উপায় ব্যবহার করে আপনি অতিরিক্ত প্রোফাইল যুক্ত করার ক্ষেত্রে অপ্রত্যাশিত ত্রুটি পেতে পারেন।
অ্যালেক্স এফিমভ

এই পদ্ধতির অপূর্ণতা হ'ল এটি মূল্যায়ন করার সময় স্প্রিং বিবেচনা করতে পারে এমন সমস্ত প্রোফাইল সেগুলিতে পাবেন না @Profile। অ্যাপ্লিকেশনগুলি spring.profiles.include সম্পত্তিটিও ব্যবহার করতে পারে এবং প্রারম্ভিক ব্যবহারের সময় প্রোগ্রামিকভাবে প্রোফাইল সেট করতে পারে ConfigurableEnvironmentEnvironment.getActiveProfiles()এই যেকোন প্রক্রিয়া ব্যবহার করে সেট করা প্রোফাইলগুলির সম্পূর্ণ তালিকা পাবেন।
স্কট ফ্রেডেরিক


0

দেখে মনে হচ্ছে স্থিতিশীলভাবে এটি অ্যাক্সেস করতে সক্ষম হওয়ার কিছু চাহিদা রয়েছে।

অ-বসন্ত-পরিচালিত ক্লাসগুলিতে স্থির পদ্ধতিতে আমি কীভাবে এই জাতীয় জিনিস পেতে পারি? - এথেরাস

এটি হ্যাক, তবে এটি প্রকাশ করার জন্য আপনি নিজের শ্রেণি লিখতে পারেন। আপনাকে অবশ্যই নিশ্চিত হতে হবে যে SpringContext.getEnvironment()সমস্ত মটরশুটি তৈরি হওয়ার আগে কিছুই কল করবে না , যেহেতু এই উপাদানটি তাত্ক্ষণিকভাবে চালু করা হবে তার কোনও গ্যারান্টি নেই।

@Component
public class SpringContext
{
    private static Environment environment;

    public SpringContext(Environment environment) {
        SpringContext.environment = environment;
    }

    public static Environment getEnvironment() {
        if (environment == null) {
            throw new RuntimeException("Environment has not been set yet");
        }
        return environment;
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.