आपका Spring Boot 8080 पर सुनने को "क्यों नहीं" तैयार है?
\nआप अपना पहला Spring Boot एप्लिकेशन चला रहे हैं, कंसोल में मनचाहा बैनर देखते हैं, ब्राउज़र खोलते हैं — और वहाँ "Connection refused" दिखता है। परिचित स्थिति है? अक्सर समस्या यह होती है कि पोर्ट 8080 पहले से किसी अन्य प्रक्रिया (जैसे Skype, Docker या आपके एप्लिकेशन की दूसरी इंस्टेंस) द्वारा उपयोग किया जा रहा है। या, इसके विपरीत, आपको एक ही मशीन पर तीन माइक्रोसर्विसेज चलानी हैं, और वे सभी एक ही पोर्ट पर कब्जा करना चाहती हैं।
\nइस लेख में हम Spring Boot में पोर्ट सेट करने के सभी मुख्य तरीकों पर चर्चा करेंगे — सबसे सरल से लेकर प्रोडक्शन के लिए "बैटल-टेस्टेड" तरीकों तक। आप सीखेंगे कि कॉन्फ़िगरेशन फ़ाइलों, एनवायरनमेंट वेरिएबल्स, कमांड लाइन आर्गुमेंट्स और प्रोग्रामेटिक रूप से पोर्ट को कैसे ओवरराइड किया जाए। और अंत में, मैं एक चेकलिस्ट दूंगा कि स्थिति के अनुसार कौन सा तरीका चुनना चाहिए।
\n\nतरीका 1: application.properties — क्लासिक तरीका
\nसबसे सामान्य और सहज तरीका। फ़ाइल src/main/resources/application.properties में बस एक लाइन जोड़ें:
server.port=9090\nबस इतना ही। एप्लिकेशन को पुनरारंभ करने के बाद, यह पोर्ट 9090 पर सुनेगा। यदि 8080 पर वापस जाना है, तो बस लाइन हटाएँ या कमेंट कर दें।
\nलाभ: सरलता, स्पष्टता, "बॉक्स से बाहर" काम करता है।
\nनुकसान: कोड में हार्डकोडेड — प्रत्येक वातावरण (dev, test, prod) के लिए फ़ाइल को मैन्युअल रूप से बदलना होगा या प्रोफाइल का उपयोग करना होगा।
\n\nतरीका 2: application.yml (YAML) — संरचना प्रेमियों के लिए
\nयदि आप YAML फ़ॉर्मेट पसंद करते हैं, तो कॉन्फ़िगरेशन इस प्रकार होगा:
\nserver:\n port: 9090\nइंडेंटेशन पर ध्यान दें: port से पहले दो स्पेस। YAML स्पेस के प्रति संवेदनशील है, लेकिन यह सेटिंग्स को समूहित करने की अनुमति देता है। उदाहरण के लिए, आप एक साथ कॉन्टेक्स्ट पथ भी सेट कर सकते हैं:
server:\n port: 9090\n servlet:\n context-path: /myapp\nकब उपयोग करें: यदि आपका प्रोजेक्ट पहले से सभी कॉन्फ़िगरेशन के लिए YAML का उपयोग करता है (जैसे Spring Cloud Config के लिए)।
\n\nतरीका 3: कमांड लाइन आर्गुमेंट्स — DevOps के लिए लचीलापन
\nसबसे लचीला तरीका, जो अक्सर कंटेनरों और CI/CD में उपयोग किया जाता है। JAR फ़ाइल चलाते समय, बस पैरामीटर पास करें:
\njava -jar myapp.jar --server.port=9090\nया, यदि Maven/Gradle प्लगइन का उपयोग कर रहे हैं:
\nmvn spring-boot:run -Dspring-boot.run.arguments=--server.port=9090\nSpring Boot में कॉन्फ़िगरेशन के सभी तरीकों में कमांड लाइन आर्गुमेंट्स का सबसे उच्च प्राथमिकता है। इसका मतलब है कि वे application.properties में लिखी गई बातों को भी ओवरराइड कर देंगे।
इसके लिए आदर्श: Docker कंटेनर, Kubernetes, स्वचालित डिप्लॉयमेंट।
\n\nतरीका 4: एनवायरनमेंट वेरिएबल्स — बारह-कारक एप्लिकेशन का मानक
\nSpring Boot स्वचालित रूप से एनवायरनमेंट वेरिएबल्स को पढ़ता है और उन्हें प्रॉपर्टीज़ में बदल देता है। नियम सरल है: SERVER_PORT (अपर केस में, डॉट के बजाय अंडरस्कोर) server.port बन जाएगा।
Linux/macOS में:
\nexport SERVER_PORT=9090\njava -jar myapp.jar\nWindows (cmd) में:
\nset SERVER_PORT=9090\njava -jar myapp.jar\nDocker Compose में यह और भी सुंदर दिखता है:
\nservices:\n myapp:\n image: myapp:latest\n ports:\n - "9090:9090"\n environment:\n - SERVER_PORT=9090\nयह क्यों बढ़िया है: एनवायरनमेंट वेरिएबल्स रिपॉजिटरी में नहीं जाते, विभिन्न वातावरणों के लिए इन्हें बदलना आसान है, और ये 12-factor app पद्धति का पालन करते हैं।
\n\nतरीका 5: प्रोग्रामेटिक कॉन्फ़िगरेशन — माइक्रोमैनेजमेंट के लिए
\nकभी-कभी पोर्ट को डायनामिक रूप से गणना करने की आवश्यकता होती है (उदाहरण के लिए, एक मुफ्त पोर्ट ढूंढना या बाहरी सेवा से प्राप्त करना)। तब Java कोड मदद करता है।
\nसबसे सरल विकल्प क्लास में setServerPort मेथड को ओवरराइड करना है