हर डेवलपर आधुनिक तकनीकों के साथ काम करने और अप-टू-डेट रहने का सपना देखता है। वास्तव में, पुरानी, अप्रचलित और अक्सर अप्रभावी और यहां तक कि अभी भी जन्मी हुई तकनीकों के इर्द-गिर्द एक मजबूत भर्ती रणनीति बनाना लगभग असंभव है।
हालाँकि, जीवन जटिल है, और सब कुछ हमेशा हमारी इच्छाओं पर निर्भर नहीं होता।
आपको पदोन्नति की पेशकश की जा सकती है और ऐसे प्रोजेक्ट में स्थानांतरित किया जा सकता है, जहाँ तकनीकें वर्षों से नहीं बदली या अपडेट नहीं की गई हैं। या, आपको अपनी पसंदीदा कंपनी में नौकरी मिल सकती है, जहाँ वर्तमान तकनीक स्टैक में फिलहाल आपकी कोई खास दिलचस्पी नहीं है। शायद आपने अभी-अभी विश्वविद्यालय से स्नातक किया है और अपना पहला कार्य अनुभव प्राप्त करने के लिए उत्सुक हैं, या शायद आपको अपनी पिछली नौकरी से निकाल दिया गया है और वित्तीय कठिनाई से बचने के लिए आपको जल्दी से कोई नई नौकरी ढूँढ़ने की ज़रूरत है।
एक अन्य परिदृश्य भी है: साक्षात्कार के दौरान, आपको बताया जाता है कि आप वर्तमान स्टैक के साथ काम करना शुरू करेंगे, लेकिन भविष्य में बदलाव करने के लिए आपके पास बहुत सारे अवसर होंगे - शायद, संभवतः, लेकिन...
लेकिन ईमानदारी से कहें तो यह सब सिर्फ़ दर्शनशास्त्र है। मैं सहमत हूँ, और मेरा प्रस्ताव है कि हम एक वास्तविक मामले का विश्लेषण करें जिसका सामना आपको अपने चुनौतीपूर्ण करियर पथ पर करना पड़ सकता है।
JVM स्टैक के सभी प्रशंसकों के लिए, विशेष रूप से जो स्प्रिंग फ्रेमवर्क को पसंद करते हैं, यह आपके लिए है, कृपया आगे पढ़ें।
वैसे, आपको स्प्रिंग बूट एप्लीकेशन को एप्लीकेशन सर्वर पर तैनात करने की क्या जरूरत है, जब यह स्वतंत्र रूप से चल सकता है? आखिरकार, यह स्प्रिंग बूट की सबसे बेहतरीन विशेषताओं में से एक है।
और इसलिए, इसके कई कारण हो सकते हैं:
जावा 8 को 18 मार्च 2014 को जारी किया गया और इसमें कुछ महत्वपूर्ण विशेषताएं शामिल की गईं जिनका उपयोग हम आज भी करते हैं।
मुझे उदाहरणों के लिए ज्यादा दूर जाने की जरूरत नहीं है, यहां उनमें से कुछ उदाहरण दिए गए हैं:
लैम्ब्डा एक्सप्रेशंस
स्ट्रीम एपीआई
वैकल्पिक कक्षा
java.time पैकेज (दिनांक और समय API)
आदि आदि
तब से लेकर आज तक तीन LTS संस्करण जारी किए जा चुके हैं( 19/08/2024 ):
न्यू रेलिक द्वारा किए गए एक अध्ययन के अनुसार, जावा 8 का उपयोग अभी भी 28.8% मौजूदा परियोजनाओं में किया जाता है, जो कि, जैसा कि आप सहमत होंगे, महत्वहीन नहीं है। जबकि इसका हिस्सा साल दर साल धीरे-धीरे कम होता जा रहा है, निश्चित रूप से इस तकनीक को पूरी तरह से खारिज करना जल्दबाजी होगी।
एक्लिप्स ग्लासफिश को समर्पित प्रोजेक्ट एक्लिप्स वेबसाइट के अनुसार:
एक्लिप्स ग्लासफिश® एक पूर्ण एप्लिकेशन सर्वर है जो जकार्ता ईई विनिर्देश को लागू करता है। ग्लासफिश में सभी आवश्यक और वैकल्पिक जकार्ता ईई एपीआई के कार्यान्वयन शामिल हैं, और सभी जकार्ता ईई टीसीके को पास करता है। ग्लासफिश में एक पूर्ण प्रशासन कंसोल, क्लस्टरिंग समर्थन और अन्य डेवलपर और उत्पादन केंद्रित उपकरण और सुविधाएँ भी शामिल हैं।
दुर्भाग्य से, इस वेबसाइट से 5.1.0 से कम के संस्करण को डाउनलोड करना संभव नहीं है, लेकिन चूंकि हमने पांचवें से नीचे के संस्करण का उपयोग करने का फैसला किया है, इसलिए हमें Oracle वेबसाइट पर जाना होगा, जहाँ आप डाउनलोड अनुभाग में इस उत्पाद के कई पुराने संस्करण पा सकते हैं। लेकिन लाइसेंस के साथ सावधान रहें और अपने सैंडबॉक्स के बाहर इस फ़ोल्डर से कुछ भी उपयोग न करें।
बस वितरण फ़ाइल को अपनी मशीन पर कहीं रखें, bin
फ़ोल्डर पर जाएँ, और निम्नलिखित कमांड चलाएँ:
./asadmin start-domain --verbose
थोड़ी देर प्रतीक्षा करें, और http://localhost:4848/ खोलने का प्रयास करें, एडमिन कंसोल डिफ़ॉल्ट रूप से उपलब्ध होना चाहिए और किसी भी प्रकार के क्रेडेंशियल्स के लिए नहीं पूछना चाहिए। बाएं पैनल पर, आपको एप्लिकेशन टैब मिलेगा, यदि आप उस पर क्लिक करते हैं, तो आपके पास एक मेनू तक पहुंच होगी जिसके साथ आप एप्लिकेशन को तैनात, अनडिप्लॉय, सक्षम और अक्षम कर सकते हैं।
ग्लासफिश पर अपना एप्लिकेशन तैनात करने के लिए आपको इस समय बस इतना ही जानना होगा।
वेब डेवलपमेंट की दुनिया में शायद ऐसा कोई व्यक्ति मिलना मुश्किल है जिसने कम से कम एक बार इस लोकप्रिय फ्रेमवर्क के बारे में न सुना हो।
स्प्रिंग बूट 2 को 2021 में जारी किया गया था और इसके लिए न्यूनतम संस्करण के रूप में जावा 8 की आवश्यकता होती है, जबकि संस्करण 3 के लिए न्यूनतम संस्करण के रूप में जावा 17 की आवश्यकता होती है ।
नवीनतम सुविधाओं, सुरक्षा पैच और कुछ अनुकूलन का उपयोग करने में सक्षम होने के लिए हमें जावा 8 का समर्थन करने वाला नवीनतम संस्करण खोजना होगा।
और यहाँ यह है, 2.7.18, उनके ब्लॉग के अनुसार, 2.7.18 स्प्रिंग बूट 2.x और तदनुसार जावा 8 और जावा 11 का समर्थन करने वाला नवीनतम संस्करण बन गया:
5.5 साल और 121 रिलीज़ के बाद, 2.7.18 स्प्रिंग बूट 2.x के लिए ओपन सोर्स सपोर्ट का अंत दर्शाता है। कृपया जल्द से जल्द स्प्रिंग बूट 3 में अपग्रेड करें। यदि आप अभी भी अपग्रेड करने के लिए तैयार नहीं हैं, तो स्प्रिंग बूट 2.7.x के लिए व्यावसायिक समर्थन उपलब्ध है ।
स्प्रिंग बूट समुदाय ईई वातावरण में स्प्रिंग बूट एप्लिकेशन को चलाने के तरीके पर सिफारिशें प्रदान करता है + आधिकारिक दस्तावेज़
अनुप्रयोग के निर्माण और चलाने के लिए न्यूनतम और पर्याप्त pom.xml निम्न प्रकार दिखाई देगा:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.18</version> <relativePath/> </parent> <groupId>io.github.isharipov</groupId> <artifactId>sb2-to-gf4</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
यहां आपको दो बातों पर ध्यान देने की जरूरत है:
मैं एप्लिकेशन को एक वॉर फ़ाइल के रूप में पैकेज कर रहा हूं ताकि एप्लिकेशन सर्वर को यह स्पष्ट हो सके कि मैं एक वेब एप्लिकेशन तैनात कर रहा हूं
<packaging>war</packaging>
मैं एम्बेडेड टॉमकैट को छोड़कर स्प्रिंग-बूट-स्टार्टर-टॉमकैट निर्भरता को जोड़ रहा हूं, दो आंतरिक निर्भरताओं को छोड़कर और प्रदान किए गए दायरे को जोड़ रहा हूं
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> <scope>provided</scope> </dependency>
यह दृष्टिकोण आपको टॉमकैट को शामिल करने और इसे केवल स्प्रिंग बूट रनटाइम के लिए उपलब्ध कराने की अनुमति देता है, जिससे आप एप्लिकेशन को एप्लिकेशन सर्वर से स्वतंत्र रूप से चला सकते हैं। यह पृथक्करण महत्वपूर्ण है। स्प्रिंग इस निर्भरता को परिणामी आर्टिफैक्ट के भीतर lib-provided नामक एक अलग फ़ोल्डर में रखता है। अब आपके पास परिणामी आर्टिफैक्ट को चलाने के लिए कम से कम तीन विकल्प हैं:
domain-dir/autodeploy
के अंतर्गत autodeploy निर्देशिका में कॉपी करेंasadmin
API - तैनाती आदेशjava -jar
का उपयोग करके चलाएँ: spring-boot-maven-plugin दो आर्टिफैक्ट बनाता है - war
और war.original
। सरल war
में lib-provided
शामिल है, original
में नहीं।निम्नलिखित निर्भरताओं को बाहर करने से हम परिणामी आर्टिफैक्ट आकार को कम कर सकते हैं:
<exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> </exclusion> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion>
एप्लिकेशन सर्वर पर स्प्रिंग बूट एप्लिकेशन चलाने के लिए, आपको मुख्य एप्लिकेशन क्लास में दो संशोधन करने होंगे।
आमतौर पर, एक सरल वेब अनुप्रयोग स्थापित करने के लिए, आप एक main
विधि के साथ एक सार्वजनिक वर्ग बनाएंगे, और इसे @SpringBootApplication एनोटेशन के साथ एनोटेट करेंगे।
@SpringBootApplication public class Application { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
तो, जैसा कि मैंने ऊपर बताया, दो संशोधन:
@SpringBootApplication public class Application extends SpringBootServletInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { LOGGER.debug("From main"); SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { LOGGER.debug("From configure"); return application.sources(Application.class); } }
और अंतिम लेकिन महत्वपूर्ण बात, आपको परिनियोजन विवरण जोड़ने की आवश्यकता है
तो, main → src → webapp → WEB-INF फ़ोल्डर के अंतर्गत आपको निम्न फ़ाइल डालनी होगी - glassfish-web.xml :
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app> <class-loader delegate="false"/> <session-config> <session-manager/> </session-config> <jsp-config/> </glassfish-web-app>
परिनियोजन विवरण के बारे में अधिक पढ़ें
क्लास लोडर डेलिगेशन के बारे में अधिक पढ़ें