বসন্তে ডিফল্ট প্রোফাইল ৩.১


100

আমার আবেদন আমি মটরশুটি সঙ্গে সটীক আছে @Profile("prod")এবং @Profile("demo")। প্রথমটি, যেমন আপনি অনুমান করতে পারেন :), শিমগুলিতে ব্যবহার করা হয় যা উত্পাদন ডিবিতে সংযুক্ত হয় এবং দ্বিতীয়টি মটরশুটি টিকা দেয় যা কিছু জাল ডিবি ( HashMapবা যাই হোক না কেন) ব্যবহার করে - উন্নতি দ্রুত করে তোলে।

আমি যা চাই তা হ'ল ডিফল্ট প্রোফাইল ( "prod") যা এটি " অন্য কিছু " দ্বারা ওভাররাইড না করা থাকলে সর্বদা ব্যবহৃত হবে ।

আমার মধ্যে নিখুঁত হবে web.xml:

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>prod</param-value>
</context-param>

এবং তারপরে এটিকে ওভাররাইড করুন -Dspring.profiles.active="demo"যাতে আমি করতে পারি:

mvn jetty:run -Dspring.profiles.active="demo". 

তবে দুঃখের বিষয় এই কাজ করছে না। কোন ধারণা আমি কিভাবে এটি অর্জন করতে পারে? -Dspring.profiles.active="prod"আমার সমস্ত পরিবেশে সেট করা কোনও বিকল্প নয়।

উত্তর:


67

আমার অভিজ্ঞতা যে ব্যবহার

@Profile("default")

শিমটি কেবলমাত্র প্রসঙ্গে যুক্ত করা হবে যদি অন্য কোনও প্রোফাইল সনাক্ত না করা হয়। আপনি যদি অন্য কোনও প্রোফাইলে পাস করেন, যেমন -Dspring.profiles.active="demo", এই প্রোফাইলটিকে উপেক্ষা করা হবে।


4
গৃহীত উত্তরটি ওয়েব.এক্সএমএল (এবং এটি দুর্দান্ত) এর উপর নির্ভর করে, তবে এই উত্তরটি আপনার কাছে ওয়েব.এক্সএমএল আছে কিনা তা কার্যকর করে এবং তাই এটি প্রত্যেকের পক্ষে আরও বিস্তৃতভাবে কার্যকর is
জে

1
এই সমাধানটি বেশ পরিষ্কার
14

এটি কি কোনও অফিসিয়াল বৈশিষ্ট্য বা কোনও পার্শ্ব প্রতিক্রিয়া? আপনি কি বসন্তের ডকুমেন্টেশনের লিঙ্ক করতে চান যেখানে এই বৈশিষ্ট্যটি বর্ণিত হয়েছে?
rustyx

111

আপনার Web.xml এ ডিফল্ট প্রোফাইল হিসাবে আপনার উত্পাদন পরিবেশকে সংজ্ঞায়িত করুন Def

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>prod</param-value>
</context-param>

এবং আপনি যদি অন্য কোনও প্রোফাইল ব্যবহার করতে চান তবে এটি সিস্টেম সম্পত্তি হিসাবে পাস করুন

mvn -Dspring.profiles.active="demo" jetty:run

3
না সে ওয়েব.এক্সএমএল এবং সিস্টেম সম্পত্তি হিসাবে সক্রিয় প্রোফাইলটি সংজ্ঞায়িত করার চেষ্টা করেছিল । আমার সমাধানে আমি ওয়েব.এক্সএমএল এ একটি ডিফল্ট প্রোফাইল কনফিগার করি এবং সিস্টেম সম্পত্তির মাধ্যমে সক্রিয় প্রোফাইলটি ওভাররাইট / সংজ্ঞায়িত করি । কোনও সুস্পষ্ট সক্রিয় প্রোফাইল না থাকলে ডিফল্ট ব্যবহার করা হবে।
andih

1
ধন্যবাদ! এটাই আমি চেয়েছিলাম! এটি কোথাও খুঁজে
পেল

এই পদ্ধতির সাথে একটি সমস্যা: আপনি যদি সেট আপ spring.profiles.default=prodকরেন application.propertiesতবে application-prod.propertiesলোড হবে না। এটি পাল্টা স্বজ্ঞাত।
গেমেলিলা

@gamliela অ্যাপ্রোচটি কোনও application.propertiesফাইলে ডিফল্ট প্রোফাইল সেট করে না । এটি application-prod.propertiesব্যবহার করা উচিত তা জানার জন্য আপনাকে প্রোফাইলটি জানতে হবে। এই পদ্ধতির কি তাই। এটি বসন্তের প্রেক্ষাপটের বাইরে প্রোফাইলগুলি সংজ্ঞায়িত করে web.xml(ডিফল্ট) অথবা পরিবেশ পরিবর্তনশীল (ডিফল্টকে ওভাররাইট) মাধ্যমে।
অ্যান্ডি

@ কান্দিহ হ্যাঁ, আমি এটি জানি, তবে আমি কেবল বলেছি এটি স্বজ্ঞাত এবং তাই সমস্যাযুক্ত নয়। যেহেতু application-default.propertiesপেতে লোড আমিও আশা করি application-newdefault.propertiesপাশাপাশি লোড হবে। এটি আপনার সমাধানের সাথে কোনও সমস্যা নয়, এটি স্প্রিংয়ের সমস্যা ...
গামেলিলা

6

আমার একই সমস্যা আছে তবে সার্ভলেট কনটেক্সট প্রোগ্রাম্যালি (সার্ভলেট 3.0.০+) কনফিগার করতে আমি ওয়েব অ্যাপ্লিকেশন ইনিটিয়ালাইজার ব্যবহার করি । সুতরাং আমি নিম্নলিখিতটি করি:

public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        // Create the 'root' Spring application context
        final AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        // Default active profiles can be overridden by the environment variable 'SPRING_PROFILES_ACTIVE'
        rootContext.getEnvironment().setDefaultProfiles("prod");
        rootContext.register(AppConfig.class);

        // Manage the lifecycle of the root application context
        sc.addListener(new ContextLoaderListener(rootContext));
    }
}

5

আপনি প্রোড প্রোফাইল অপসারণের বিষয়েও বিবেচনা করতে পারেন এবং @ প্রোফাইলে ("! ডেমো") ব্যবহার করতে পারেন


2
আমি মনে করি আপনার যদি দুটির বেশি প্রোফাইল থাকে ঠিক আছে, এটি কাজ করে না?
চপ

3

ডিফল্ট প্রোডাক্ট প্রোফাইল সেট করার বিষয়ে ইতিমধ্যে @andh পোস্ট করেছেন

মাভেন জেটি প্লাগইনের জন্য ডিফল্ট প্রোফাইল সেট করার সবচেয়ে সহজ উপায় হ'ল আপনার প্লাগইন কনফিগারেশনে নীচের উপাদানটি অন্তর্ভুক্ত করা:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <systemProperties>
            <systemProperty>
                <name>spring.profiles.active</name>
                <value>demo</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>

3

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

  • spring.profiles.active

এবং

  • spring.profiles.default

যদি spring.profiles.activeসেট করা থাকে, তবে এর মান নির্ধারণ করে যে কোন প্রোফাইলগুলি সক্রিয় রয়েছে। তবে যদি spring.profiles.activeসেট না করা থাকে, তবে স্প্রিংয়ের দিকে নজর রয়েছেspring.profiles.default.

যদি না হয় spring.profiles.activeবা spring.profiles.defaultসেট না করা থাকে তবে সেখানে কোনও সক্রিয় প্রোফাইল নেই এবং কেবলমাত্র সেই মটরশুটিগুলি প্রোফাইল হিসাবে থাকা হিসাবে সংজ্ঞায়িত করা হয় না। এমন কোনও বিন যা কোনও প্রোফাইল নির্দিষ্ট করে না তা defaultপ্রোফাইলের অন্তর্ভুক্ত।


-1

আপনি আপনার ওয়েব.এক্সএমএলকে ফিল্টার করা সংস্থান হিসাবে সেটআপ করতে পারেন এবং এই মানটি ম্যাভেন প্রোফাইল সেটিংস থেকে পূর্ণ করতে পারেন - আমরা যা করি।

পম ফিল্টার সমস্ত সংস্থান (আপনি যদি তাদের মধ্যে চিহ্নিত না থাকে তবে আপনি তাহট করতে পারেন)

<webResources>
    <resource>
        <directory>src/main/webapp</directory>
        <filtering>true</filtering>
    </resource>
</webResources>

ওয়েব.এক্সএমএল লাগাতে

<context-param>
     <param-name>spring.profiles.active</param-name>
     <param-value>${spring.prfile}</param-value>
</context-param>

পোমে মাভেন প্রোফাইল তৈরি করুন

<profiles>
    <profile>
        <id>DEFAULT</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <spring.profile>prod</spring.profile>
        </properties>
    <profile>
    <profile>
        <id>DEMO</id>
        <properties>
            <spring.profile>demo</spring.profile>
        </properties>
    <profile>
</profiles>

এখন আপনি ব্যবহার করতে পারেন

mvn jetty:run -P DEMO

বা কেবল -P DEMOকোনও maven কমান্ড দিয়ে


1
আমি নিশ্চিত নই তবে আমি মনে করি এটি কার্যকর হবে না। আইএমএইচও জেটি: সঞ্চালনের ধাপটি চলবে না যেখানে সংস্থানগুলি ফিল্টার করা হয়েছে।
মিশা মার্জিয়েল

সতর্কতার জন্য আপনাকে এমভিএন ক্লিন কম্পাইল জেটি চালানো দরকার: ডেমো চালান-পি-এম-ডেমো, তবে কম্পম্পিড কোড সহ এটি এটিটিমেটিকভাবে চালায়
হুরদা

10
আমি বুঝতে পারি যে স্প্রিং ৩.১ প্রোফাইলের অন্যতম প্রধান লক্ষ্য হ'ল সমস্ত পরিবেশে মোতায়েনের জন্য প্রস্তুত একটি একক ওয়ার ফাইল তৈরি করা। মাভেন প্রোফাইলগুলি ব্যবহার করা পূর্বের রাজ্যের এক ধাপ is যেখানে প্রতিটি পরিবেশের জন্য ওয়ার
ওয়ার্কের

@ এড্রাবসি তিনি এমভিএন জেটি চেয়েছিলেন: রান - কোনও ওয়ার ফাইল নেই।
হুরদা

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