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


199

আমরা একটি স্প্রিং বুট ওয়েব অ্যাপে কাজ করছি এবং আমরা যে ডেটাবেসটি ব্যবহার করছি তা হ'ল মাই এসকিএল ;

  • আমাদের সেটআপটি হ'ল আমরা প্রথমে স্থানীয়ভাবে এটি পরীক্ষা করি (এর অর্থ আমাদের পিসিতে মাইএসকিএল ইনস্টল করা দরকার);

  • তারপরে আমরা বিটবাকেটে ঠেকি ;

  • জেনকিনস স্বয়ংক্রিয়ভাবে বিটবকেটের নতুন ধাক্কাটি সনাক্ত করে এবং এটির উপর একটি বিল্ড তৈরি করে (জেনকিনস এমভিএন বিল্ড পাস করার জন্য আমাদের জেনকিনস চলমান ভার্চুয়াল মেশিনে মাইএসকিউএলও ইনস্টল করতে হবে)।

  • যদি জেনকিন্স বিল্ড পাসের আমরা আমাদের আবেদন কোড ধাক্কা OpenShift এর (জেনকিন্স উপর OpenShift স্থাপনার প্লাগইন ব্যবহার করে)।

আপনি যে সমস্যাটি ইতিমধ্যে এটি অনুধাবন করতে পেরেছেন তা হ'ল:

  • মধ্যে application.propertiesআমরা হার্ড কোড মাইএসকিউএল তথ্য পারেন। যেহেতু আমাদের প্রকল্পটি 3 টি পৃথক স্থানে চলবে ( স্থানীয় , জেনকিনস এবং ওপেনশিফ্ট ) আমাদের ডাটাসোর্স ফিল্ডটিকে গতিশীল করতে হবে application.properties(আমরা জানি যে এটি করার বিভিন্ন উপায় রয়েছে তবে আমরা আপাতত এই সমাধানে কাজ করছি)।

    spring.datasource.url = 
    spring.datasource.username = 
    spring.datasource.password = 

আমরা যে সমাধানটি নিয়ে এসেছি তা হ'ল আমরা স্থানীয়ভাবে এবং জেনকিন্স ভিএম-তে সিস্টেম এনভায়রনমেন্ট ভেরিয়েবলগুলি তৈরি করি (ওপেনশিফ্টের নামগুলি তাদের একই নামকরণ করে) এবং যথাক্রমে সঠিক মান নির্ধারণ করে:

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

আমরা এটি করেছি এবং এটি কাজ করে। আমরা এগুলিও পরীক্ষা করে দেখেছি Map<String, String> env = System.getenv();যে পরিবেশের ভেরিয়েবলগুলি জাভা ভেরিয়েবলগুলিতে তৈরি করা যেতে পারে:

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");   
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");   
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST"); 
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

এখন কেবল আমাদের কাছে এই জাভা ভেরিয়েবলগুলি ব্যবহার করা দরকার application.propertiesএবং এটিই আমরা সমস্যায় পড়ছি।

ফোল্ডার, এবং কিভাবে আমরা দায়িত্ব অর্পণ করতে হবে password, userName, sqlURL, এবং sqlPortজন্য ভেরিয়েবল application.propertiesতাদের দেখতে পাবে এবং কিভাবে আমরা তাদের অন্তর্ভুক্ত নাapplication.properties ?

এর মধ্যে অন্যতম হ'ল আমরা অনেকগুলি বিষয় চেষ্টা করেছি:

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

এখনও ভাগ্য নেই। আমরা সম্ভবত এই এনভির ভেরিয়েবলগুলি সঠিক বর্গ / ফোল্ডারে রাখছি না বা এগুলি ভুলভাবে ব্যবহার করছিapplication.properties

আপনার সাহায্য অত্যন্ত প্রশংসা করা হয় !!

ধন্যবাদ!


উত্তর:


267

আপনার জাভা ভেরিয়েবলগুলি ব্যবহার করার দরকার নেই। সিস্টেম এনভির ভেরিয়েবলগুলি অন্তর্ভুক্ত করতে আপনার application.propertiesফাইলটিতে নিম্নলিখিতগুলি যুক্ত করুন:

spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

কিন্তু উপায় দ্বারা প্রস্তাবিত @Stefan Isele আরো বাঞ্ছনীয়, কারণ এই ক্ষেত্রে আপনি শুধু একটা env ভেরিয়েবল ডিক্লেয়ার করতে হবে: spring.profiles.active। স্প্রিং উপযুক্ত সম্পত্তি ফাইলটি application-{profile-name}.propertiesটেমপ্লেট দ্বারা স্বয়ংক্রিয়ভাবে পড়বে ।


12
এই পদ্ধতিটি ডকার সংযোগের জন্য আরও সুবিধাজনক। উদাহরণস্বরূপ:docker run --name my-tomcat -p 127.0.0.1:8080:8080 -e APP_DB_DB=mydb -e APP_DB_USER=dbuser -e APP_DB_PASS=dbpass --link mongo-myapp:mongo -v /path-to/tomcat/webapps:/usr/local/tomcat/webapps -d tomcat:8-jre8-alpine
Fırat KÜÇÜK

17
এটি একেবারে সেরা উপায়। এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করার অর্থ আপনার অ্যাপ্লিকেশনটির পাশাপাশি প্লেইন টেক্সটে সিক্রেটগুলি তালিকাভুক্ত করার দরকার নেই। এটি উল্লেখযোগ্যভাবে আরও সুরক্ষিত এবং আপনার পুরো সম্পদ রক্ষা করার জন্য আপনার উত্স কোড অ্যাক্সেস সুরক্ষা ব্যবস্থাগুলির উপর নির্ভরতা হ্রাস করে। সম্পত্তি সহ অন্তর্ভুক্ত একটি দুর্ঘটনাজনক পোস্টের ফলাফল তথ্য ফাঁস হয় না।
কিপার_টি

51
আমি এটিতে যুক্ত করতে এবং উল্লেখ করতে চেয়েছিলাম যে আপনি যদি বসন্ত বুট ব্যবহার করেন (এটি বুট ছাড়া কাজ করে কিনা তা পরীক্ষা করে না) তবে আপনার অ্যাপ্লিকেশন.প্রপার্টিটি পরিবর্তন না করে কোনও সম্পত্তি স্বয়ংক্রিয়ভাবে পরিবেশের পরিবর্তনশীল মাধ্যমে ওভাররাইড করা যেতে পারে। অর্থাত, আপনি একটি সম্পত্তি বলা আছে spring.activemq.broker-urlতারপর সংশ্লিষ্ট এনভায়রনমেন্ট ভেরিয়েবল হবে: SPRING_ACTIVEMQ_BROKER_URL। পিরিয়ড এবং ড্যাশগুলি স্বয়ংক্রিয়ভাবে আন্ডারস্কোরগুলিতে রূপান্তরিত হয়। পাত্রে / বসন্ত বুটের সাথে কাজ করার সময় এটি অত্যন্ত সুবিধাজনক।
আবে

15
যদি আপনি মেঘের জন্য ডিজাইন করেন তবে এটি স্প্রিং প্রোফাইল ব্যবহারের পক্ষে পছন্দনীয় উপায় নয়। পরিবেশের ভেরিয়েবলগুলি 12 ফ্যাক্টর অ্যাপ মান দ্বারা প্রস্তাবিত: 12factor.net/config
মিখাইল গোলুবতসভ

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

72

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

এটি আপনাকে অনেক নমনীয়তা দেয়। আমি এটি আমার প্রকল্পগুলিতে ব্যবহার করছি এবং এটি অত্যন্ত সহায়ক। আপনার ক্ষেত্রে আপনার কাছে 3 প্রোফাইল থাকবে: 'লোকাল', 'জেনকিনস' এবং 'ওপেনশিফ্ট'

এর পরে আপনি 3 প্রফাইল নির্দিষ্ট সম্পত্তি ফাইল আছে: application-local.properties, application-jenkins.properties, এবংapplication-openshift.properties

সেখানে আপনি পরিবেশ সম্পর্কিত বৈশিষ্ট্য নির্ধারণ করতে পারেন। আপনি যখন অ্যাপ্লিকেশনটি চালান তখন আপনাকে এই জাতীয় সক্রিয়করণের জন্য প্রোফাইলটি নির্দিষ্ট করতে হবে: -Dspring.profiles.active=jenkins

সম্পাদন করা

স্প্রিং ডক অনুসারে আপনি SPRING_PROFILES_ACTIVEপ্রোফাইল সক্রিয় করতে সিস্টেম এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন এবং এটি প্যারামিটার হিসাবে পাস করার দরকার নেই।

রান টাইমে ওয়েব অ্যাপের জন্য সক্রিয় প্রোফাইল বিকল্পটি পাস করার কোনও উপায় আছে কি?

না। স্প্রিং অ্যাপ্লিকেশন প্রসঙ্গে নির্মাণের সময় সক্রিয় প্রোফাইলগুলি প্রথম পদক্ষেপের একটি হিসাবে নির্ধারণ করে। সক্রিয় প্রোফাইলগুলির পরে কোন সম্পত্তি ফাইলগুলি পড়া হয় এবং কোন মটরশুটি তাত্ক্ষণিক হয় তা স্থির করতে ব্যবহার করা হয়। একবার অ্যাপ্লিকেশন শুরু হয়ে গেলে এটি পরিবর্তন করা যাবে না।


4
আমি এই উত্তরটি পছন্দ করি তবে আপনি যদি পরিবেশনা থেকে প্রোফাইলের নামটি চান তবে কী করবেন? আমি -Dspring.active.profiles = $ SPRING_ACTIVE_PROFILES চেষ্টা করেছি, এবং /etc/profile.d/myenvvars.sh তে ওএস এনভ ভার্জ সেট করেছিলাম, কিন্তু স্প্রিং বুট তা পছন্দ করে না
টম হার্টওয়েল


5
এই উত্তরের জন্য ধন্যবাদ স্টিফান, এটি আমার পক্ষে কাজ করেছে, তবে একটি পরিবর্তনের সাথে - সম্পত্তিটি আসলে বসন্ত.প্রফাইলস .অ্যাকটিভ এবং স্প্রিং.অ্যাকটিভ.প্রোফিলস নয়
রুডি

10
ওপির সাথে সম্পর্কিত ক্ষেত্রে স্প্রিং প্রোফাইলগুলি খুব দরকারী হতে পারে তবে তারা উপযুক্ত নয়। এটি উত্স কোডটি কীভাবে সংরক্ষণ করা হয় এবং সেই সাথে সঞ্চিত বৈশিষ্ট্যের তথ্যের সংবেদনশীলতার কারণে এটি। ওপি প্রসঙ্গে ডেটাবেস অ্যাক্সেসের চারপাশে। এই পরিস্থিতির জন্য আপনি উত্সের সরল পাঠ্যে উত্স বিবরণ চান না। এর অর্থ যদি উত্সটি আপোস করা হয় তবে ডাটাবেসটিও আপোষযুক্ত। ভল্টের পরিবর্তে এর জন্য এনভিভ ভেরিয়েবল বা গোপন সরঞ্জামগুলি ব্যবহার করা ভাল। আমি env পছন্দ। ধারাবাহিকতার জন্য আমি সমস্ত পরিবেশকে একইভাবে পরিচালনা করতে চাই। এটি ভবিষ্যতে দুর্ঘটনা এড়ায়।
কিপার_টি

2
আপনি JAR অ্যাপ্লিকেশনটির বাহ্যিক একটি স্প্রিং বুট প্রোফাইল বৈশিষ্ট্য ফাইলটি ব্যবহার করতে পারেন। এই পরিবেশ-নির্দিষ্ট ফাইলটি উদাহরণস্বরূপ, application-production.propertiesএকটি নিরাপদ উপায়ে উত্পাদন মেশিনে স্থাপন করা হবে, এবং সাধারণত অ্যাপ্লিকেশন উত্স কোড সংগ্রহস্থল মধ্যে না।
কলিন ডি বেনেট

13

এটি বেশ কয়েকটি মন্তব্যের প্রতিক্রিয়া হিসাবে আমার খ্যাতি সরাসরি মন্তব্য করার মতো যথেষ্ট না।

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

// Previous answers incorrectly used "spring.active.profiles" instead of
// "spring.profiles.active" (as noted in the comments).
// Use AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME to avoid this mistake.

System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, environment);
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml");

12

ফ্লাইওয়ে অ্যাপ্লিকেশন.প্রপ্রেটিসে (স্প্রিং-বুট ভি 2.1) এর সরাসরি পরিবেশের পরিবর্তনগুলি সনাক্ত করতে পারে না । যেমন

spring.datasource.url=jdbc:mysql://${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

এই সমস্যাটি সমাধান করার জন্য আমি এই পরিবেশের ভেরিয়েবলগুলি করেছি, সাধারণত আমি .env ফাইলটি তৈরি করি:

SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/place
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=root

এবং আমার পরিবেশে ভেরিয়েবলগুলি রফতানি করুন:

export $(cat .env | xargs)

এবং অবশেষে শুধু কমান্ড চালানো

mvn spring-boot:run

অথবা আপনার জারের ফাইলটি চালান

java -jar target/your-file.jar

এখানে আরও একটি পদ্ধতি রয়েছে: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/maven-plugin/example/run-env-variables.html


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

2
ধন্যবাদ @ পেটস, আমি আরও বিশদ যুক্ত করেছি, আশা করি এটি কার্যকর হবে।
ফিলিপ গিরোটি

1
দুর্দান্ত পরিবর্তন। আপনার উত্তর আপডেট করার জন্য ধন্যবাদ।
PatS

9

এখানে পরিবেশের একটি শৃঙ্খলের মাধ্যমে একটি স্নিপেট কোড রয়েছে যা বিভিন্ন পরিবেশের জন্য ফাইলগুলি লোড করা হচ্ছে।

আপনার অ্যাপ্লিকেশন রিসোর্সের অধীনে সম্পত্তি ফাইল ( এসসিআর / প্রধান / সংস্থানসমূহ ): -

 1. application.properties
 2. application-dev.properties
 3. application-uat.properties
 4. application-prod.properties

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

 application.properties -> application.{spring.profiles.active}.properties.

কোড স্নিপেট এখানে:

    import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;

    public class PropertiesUtils {

        public static final String SPRING_PROFILES_ACTIVE = "spring.profiles.active";

        public static void initProperties() {
            String activeProfile = System.getProperty(SPRING_PROFILES_ACTIVE);
            if (activeProfile == null) {
                activeProfile = "dev";
            }
            PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer
                    = new PropertySourcesPlaceholderConfigurer();
            Resource[] resources = new ClassPathResource[]
                    {new ClassPathResource("application.properties"),
                            new ClassPathResource("application-" + activeProfile + ".properties")};
            propertySourcesPlaceholderConfigurer.setLocations(resources);

        }
    }

2
স্প্রিং বুট এই দৃশ্যটি বাক্সের বাইরে পরিচালনা করে না? এখানে বাহ্যিক কনফিগারেশন ডকুমেন্টেশন
চিকেনফিট

4

সম্ভবত আমি এটি খুব দেরিতে লিখছি, তবে আমি যখন বৈশিষ্ট্যগুলি পড়ার জন্য পদ্ধতিগুলিকে ওভাররাইড করার চেষ্টা করেছি তখন একই সমস্যাটি পেয়েছি।

আমার সমস্যাটি হ'ল: ১) এনভির কাছ থেকে সম্পত্তিটি পড়ুন যদি এই সম্পত্তিটি এনভির মধ্যে সেট করা থাকে 2) সিস্টেম সম্পত্তি থেকে সম্পত্তিটি পড়ুন যদি এই সম্পত্তিটি সিস্টেম সম্পত্তিতে সেট করা থাকে 3) এবং সর্বশেষে, অ্যাপ্লিকেশন বৈশিষ্ট্য থেকে পড়ুন।

সুতরাং, এই সমস্যা সমাধানের জন্য আমি আমার বিন বিন্যাস ক্লাসে যাই

@Validated
@Configuration
@ConfigurationProperties(prefix = ApplicationConfiguration.PREFIX)
@PropertySource(value = "${application.properties.path}", factory = PropertySourceFactoryCustom.class)
@Data // lombok
public class ApplicationConfiguration {

    static final String PREFIX = "application";

    @NotBlank
    private String keysPath;

    @NotBlank
    private String publicKeyName;

    @NotNull
    private Long tokenTimeout;

    private Boolean devMode;

    public void setKeysPath(String keysPath) {
        this.keysPath = StringUtils.cleanPath(keysPath);
    }
}

এবং @ প্রোপার্টিসোর্সে ফ্যাক্টরি ওভাররাইট করুন। এবং তারপরে আমি বৈশিষ্ট্যগুলি পড়ার জন্য নিজস্ব বাস্তবায়ন তৈরি করেছি।

    public class PropertySourceFactoryCustom implements PropertySourceFactory {

        @Override
        public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
            return name != null ? new PropertySourceCustom(name, resource) : new PropertySourceCustom(resource);
        }


    }

এবং প্রপার্টিসোর্সকাস্টম তৈরি করেছে

public class PropertySourceCustom extends ResourcePropertySource {


    public LifeSourcePropertySource(String name, EncodedResource resource) throws IOException {
        super(name, resource);
    }

    public LifeSourcePropertySource(EncodedResource resource) throws IOException {
        super(resource);
    }

    public LifeSourcePropertySource(String name, Resource resource) throws IOException {
        super(name, resource);
    }

    public LifeSourcePropertySource(Resource resource) throws IOException {
        super(resource);
    }

    public LifeSourcePropertySource(String name, String location, ClassLoader classLoader) throws IOException {
        super(name, location, classLoader);
    }

    public LifeSourcePropertySource(String location, ClassLoader classLoader) throws IOException {
        super(location, classLoader);
    }

    public LifeSourcePropertySource(String name, String location) throws IOException {
        super(name, location);
    }

    public LifeSourcePropertySource(String location) throws IOException {
        super(location);
    }

    @Override
    public Object getProperty(String name) {

        if (StringUtils.isNotBlank(System.getenv(name)))
            return System.getenv(name);

        if (StringUtils.isNotBlank(System.getProperty(name)))
            return System.getProperty(name);

        return super.getProperty(name);
    }
}

সুতরাং, এটি আমাকে সাহায্য করেছে।


4

বসন্ত প্রসঙ্গে 5.0 ব্যবহার করে আমি নিম্নলিখিত এনোটোটেশনের মাধ্যমে সিস্টেম পরিবেশের ভিত্তিতে সঠিক সম্পত্তি ফাইল লোড করা সফলভাবে অর্জন করেছি

@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:application-${MYENV:test}.properties")})

এখানে মায়েনভিভ মানটি সিস্টেম এনভায়রনমেন্ট থেকে পঠিত হয় এবং যদি সিস্টেমের পরিবেশ উপস্থিত না থাকে তবে ডিফল্ট পরীক্ষা পরিবেশের সম্পত্তি ফাইলটি লোড হবে, যদি আমি কোনও ভুল মাইএনভি মান দিই - এটি অ্যাপ্লিকেশনটি আরম্ভ করতে ব্যর্থ হবে।

দ্রষ্টব্য: প্রতিটি প্রোফাইলের জন্য, আপনি বজায় রাখতে চান - আপনাকে একটি অ্যাপ্লিকেশন- [প্রোফাইল]। প্রপার্টি ফাইল তৈরি করতে হবে এবং যদিও আমি স্প্রিং কনটেক্সট ব্যবহার করেছি 5.0 এবং স্প্রিং বুট নয় - আমি বিশ্বাস করি এটি স্প্রিং ৪.১ এও কাজ করবে


3

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

সর্বোপরি যখন আমরা নীচের পদ্ধতিটি অনুসরণ করি তখন বিভিন্ন পরিবেশে মোতায়েন করা সহজ ছিল এবং অতিরিক্ত বোনাস হিসাবে আমাদের সংস্করণ নিয়ন্ত্রণে কোনও সংবেদনশীল তথ্য থাকতে হবে না

পিএইচপি সিমফনি 3 ফ্রেমওয়ার্ক থেকে ধারণাটি পাওয়া যাতে একটি parameters.yml(.gitignored) এবং একটি parameters.yml.dist(যা একটি নমুনা যা প্রথমটি তৈরি করেcomposer install ),

আমি নীচের উত্তরগুলি থেকে জ্ঞানের সংমিশ্রণটি নিম্নলিখিতভাবে করেছি: https://stackoverflow.com/a/35534970/986160 এবং https://stackoverflow.com/a/35535138/986160

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

প্রয়োগ.আইএমএল.ডিস্ট (নমুনা)

    spring:
      profiles:
        active: local/dev/prod
      datasource:
        username:
        password:
        url: jdbc:mysql://localhost:3306/db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

প্রয়োগ.মিল (দেব সার্ভারে .gitignore-d)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: verysecretpassword
    url: jdbc:mysql://localhost:3306/real_db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

প্রয়োগ.আইএমএল (স্থানীয় মেশিনে .gitignore-d)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: rootroot
    url: jdbc:mysql://localhost:3306/xampp_db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

অ্যাপ্লিকেশন-ডেভ.আইএমএল (অতিরিক্ত পরিবেশ সম্পর্কিত বৈশিষ্ট্য সংবেদনশীল নয়)

spring:
  datasource:
    testWhileIdle: true
    validationQuery: SELECT 1
  jpa:
    show-sql: true
    format-sql: true
    hibernate:
      ddl-auto: create-droop
      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57InnoDBDialect

একই .properties সঙ্গে করা যেতে পারে

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