मेरे पास एक सरल स्प्रिंग बूट एप्लिकेशन है जो जेएमएस कतार से संदेश प्राप्त करता है और लॉग फ़ाइल में कुछ डेटा बचाता है, लेकिन इसके लिए वेब सर्वर की आवश्यकता नहीं है। क्या वेब सर्वर के बिना स्प्रिंग बूट शुरू करने का कोई तरीका है?
मेरे पास एक सरल स्प्रिंग बूट एप्लिकेशन है जो जेएमएस कतार से संदेश प्राप्त करता है और लॉग फ़ाइल में कुछ डेटा बचाता है, लेकिन इसके लिए वेब सर्वर की आवश्यकता नहीं है। क्या वेब सर्वर के बिना स्प्रिंग बूट शुरू करने का कोई तरीका है?
जवाबों:
यदि आप क्लासपैथ पर टॉमकैट निर्भरता नहीं रखते हैं, तो स्प्रिंग बूट में एम्बेडेड टॉमकैट शामिल नहीं होगा। आप इस तथ्य को स्वयं उस कक्षा में EmbeddedServletContainerAutoConfiguration
देख सकते हैं जिसका स्रोत आप यहां पा सकते हैं ।
कोड का मांस @ConditionalOnClass
वर्ग पर एनोटेशन का उपयोग हैEmbeddedTomcat
इसके अलावा, अधिक जानकारी के लिए यह और यह मार्गदर्शिका और प्रलेखन का यह हिस्सा देखें
gs-convert-jar-to-war/complete
मावेन परियोजना एक एम्बेडेड टॉमकैट सर्वर को जोड़ती है, भले spring-boot-starter-tomcat
ही गुंजाइश के साथ निर्भरता घोषित की गई हो provided
। यह एक बग की तरह लगता है। इसके अलावा stackoverflow.com/q/25991789/923560
यदि आप एक सर्वलेट कंटेनर के बिना स्प्रिंग बूट चलाना चाहते हैं, लेकिन क्लासपैथ पर एक (उदाहरण के लिए परीक्षण) के साथ, निम्नलिखित का उपयोग करें, जैसा कि स्प्रिंग बूट प्रलेखन में वर्णित है :
@Configuration
@EnableAutoConfiguration
public class MyClass{
public static void main(String[] args) throws JAXBException {
SpringApplication app = new SpringApplication(MyClass.class);
app.setWebEnvironment(false); //<<<<<<<<<
ConfigurableApplicationContext ctx = app.run(args);
}
}
इसके अलावा, मैं बस इस संपत्ति में ठोकर खाई:
spring.main.web-environment=false
application.properties
पूरी तरह से ठीक काम करता है।
spring.main.web-environment
अब पदावनत हो गई है। फिर भी बूट 2.1.1 के लिए काम करता है
spring.main.web-application-type=none
spring.main.web-application-type=NONE
# REACTIVE, SERVLET
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(MyApplication.class)
.web(WebApplicationType.NONE) // .REACTIVE, .SERVLET
.run(args);
}
}
जहां WebApplicationType :
NONE
- एप्लिकेशन को वेब एप्लिकेशन के रूप में नहीं चलना चाहिए और एक एम्बेडेड वेब सर्वर शुरू नहीं करना चाहिए।REACTIVE
- एप्लिकेशन को प्रतिक्रियाशील वेब एप्लिकेशन के रूप में चलना चाहिए और एक एम्बेडेड प्रतिक्रियाशील वेब सर्वर शुरू करना चाहिए।SERVLET
- एप्लिकेशन को सर्वलेट-आधारित वेब एप्लिकेशन के रूप में चलना चाहिए और एक एम्बेडेड सर्वलेट वेब सर्वर शुरू करना चाहिए।
आप कुछ इस तरह से बना सकते हैं:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(false).run(args);
}
}
तथा
@Component
public class CommandLiner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// Put your logic here
}
}
निर्भरता अभी भी वहाँ है, लेकिन इस्तेमाल नहीं किया।
सबसे सरल उपाय। अपने आवेदन में। फ़ाइल में प्रवेश करें। पिछले उत्तर के अनुसार निम्नलिखित संपत्ति जोड़ें:
spring.main.web पर्यावरण = false
वसंत बूट स्टार्टर के संस्करण 2.0.0 के लिए, निम्नलिखित संपत्ति का उपयोग करें:
spring.main.web आवेदन-प्रकार = कोई भी
सभी संपत्तियों पर प्रलेखन के लिए इस लिंक का उपयोग करें: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
स्प्रिंग बूट v2.1.3 के लिए। कृपया, केवल ऐप्लिकेशन में गुण जोड़ें।
spring.main.web-application-type=none
यदि आपको अपने एप्लिकेशन में वेब कार्यक्षमता की आवश्यकता है (जैसे org.springframework.web.client.RestTemplate
कि कॉल के लिए), लेकिन आप TOMCAT सर्वर को शुरू नहीं करना चाहते हैं, तो बस इसे पोम में शामिल न करें:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
कार्यक्रम के माध्यम से:
ConfigurableApplicationContext ctx = new SpringApplicationBuilder(YourApplicationMain.class)
.web(WebApplicationType.NONE)
.run(args);
Application.properties फ़ाइल के माध्यम से:
spring.main.web-environment=false
Application.yml फ़ाइल के माध्यम से:
spring:
main:
web-environment:false
यदि आप स्प्रिंग.आईओ साइट से "गेटिंग स्टार्टेड" टेम्प्लेट में से एक का उपयोग करना चाहते हैं, लेकिन आपको "डिफॉल्ट" ("जीएस / स्प्रिंग-बूट") टेम्प्लेट के साथ आने वाले किसी भी सर्वलेट से संबंधित सामान की आवश्यकता नहीं है, इसके बजाय आप शेड्यूलिंग-टास्क टेम्प्लेट (जिसके पोम * में स्प्रिंग-बूट-स्टार्टर आदि शामिल हैं) को आज़मा सकते हैं:
https://spring.io/guides/gs/scheduling-tasks/
यह आपको स्प्रिंग बूट देता है, और ऐप एक स्टैंडअलोन के रूप में चलता है (कोई सर्वलेट या स्प्रिंग-वेबमिक्स आदि पोम में शामिल नहीं हैं)। जो आप चाहते थे (हालांकि आपको कुछ जेएमएस-विशिष्ट सामान जोड़ने की आवश्यकता हो सकती है, क्योंकि कोई और पहले से ही इंगित करता है)।
[* मैं मावेन का उपयोग कर रहा हूं, लेकिन यह मान लें कि ग्रैडल बिल्ड इसी तरह काम करेगा]।
Kotling के लिए यहाँ है जो मैं हाल ही में इस्तेमाल किया:
// src/main/com.blabla/ShellApplication.kt
/**
* Main entry point for the shell application.
*/
@SpringBootApplication
public class ShellApplication : CommandLineRunner {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val application = SpringApplication(ShellApplication::class.java)
application.webApplicationType = WebApplicationType.NONE
application.run(*args);
}
}
override fun run(vararg args: String?) {}
}
// src/main/com.blabla/command/CustomCommand.kt
@ShellComponent
public class CustomCommand {
private val logger = KotlinLogging.logger {}
@ShellMethod("Import, create and update data from CSV")
public fun importCsv(@ShellOption() file: String) {
logger.info("Hi")
}
}
और सब कुछ सामान्य रूप से उपलब्ध मेरे कस्टम कमांड के साथ एक शेल के साथ समाप्त होता है।
स्प्रिंग बूट में, स्प्रिंग वेब निर्भरता एक एम्बेडेड Apache Tomcat वेब सर्वर प्रदान करता है। यदि आप pom.xml में स्प्रिंग-बूट-स्टार्टर-वेब निर्भरता को हटाते हैं तो यह एक एम्बेडेड वेब सर्वर प्रदान नहीं करता है।
निम्नलिखित निर्भरता को दूर करें
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
ऊपर @nayun ओह उत्तर के समान है, लेकिन स्प्रिंग के पुराने संस्करणों के लिए, इस कोड का उपयोग करें:
SpringApplication application = new SpringApplication(DemoApplication.class);
application.setApplicationContextClass(AnnotationConfigApplicationContext.class);
application.run(args);
spring-jms
एक निर्भरता के रूप में जोड़ (मुझे लगता है)। फिर बस आवेदन शुरू करें, कोई सर्वर शुरू नहीं किया जाएगा।