আমার কাছে একটি সহজ স্প্রিং বুট অ্যাপ্লিকেশন রয়েছে যা একটি জেএমএস সারি থেকে বার্তা পেয়েছে এবং লগ ফাইলে কিছু ডেটা সংরক্ষণ করে, তবে ওয়েব সার্ভারের প্রয়োজন হয় না। ওয়েব সার্ভার ছাড়া স্প্রিং বুট শুরু করার কোনও উপায় আছে কি?
আমার কাছে একটি সহজ স্প্রিং বুট অ্যাপ্লিকেশন রয়েছে যা একটি জেএমএস সারি থেকে বার্তা পেয়েছে এবং লগ ফাইলে কিছু ডেটা সংরক্ষণ করে, তবে ওয়েব সার্ভারের প্রয়োজন হয় না। ওয়েব সার্ভার ছাড়া স্প্রিং বুট শুরু করার কোনও উপায় আছে কি?
উত্তর:
ক্লাসপথে টমক্যাট নির্ভরতা না থাকলে স্প্রিং বুটে এম্বেডড টমক্যাট অন্তর্ভুক্ত হবে না। EmbeddedServletContainerAutoConfiguration
যার উত্স আপনি এখানে খুঁজে পেতে পারেন সেই ক্লাসে আপনি নিজেই এই সত্যটি দেখতে পারেন ।
কোডের মাংস হ'ল @ConditionalOnClass
ক্লাসে টীকাগুলির ব্যবহারEmbeddedTomcat
এছাড়াও, আরও তথ্যের জন্য এটি এবং এই গাইড এবং ডকুমেন্টেশনের এই অংশটি দেখুন
gs-convert-jar-to-war/complete
ম্যাভেন প্রকল্পের নেই একটি এমবেডেড হুল বিড়াল সার্ভার যোগ থাকা সত্ত্বেও spring-boot-starter-tomcat
নির্ভরতা সুযোগ ঘোষিত provided
। এটি একটি বাগের মতো অনুভব করে। এছাড়াও স্ট্যাকওভারফ্লো.com
আপনি যদি কোনও সার্লেট কন্টেইন ছাড়াই বসন্ত বুট চালাতে চান তবে ক্লাসপাথের একটিতে (যেমন পরীক্ষার জন্য), বসন্ত বুটের ডকুমেন্টেশনে বর্ণিত হিসাবে নিম্নলিখিতটি ব্যবহার করুন :
@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);
}
}
যেখানে ওয়েব অ্যাপ্লিকেশন টাইপ :
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
}
}
নির্ভরতা এখনও সেখানে রয়েছে তবে ব্যবহৃত হয়নি।
সহজ সমাধান। আপনার application.properties ফাইল এ। পূর্ববর্তী উত্তরে উল্লিখিত সম্পত্তি হিসাবে যুক্ত করুন:
বসন্ত.মন.ওয়েব-পরিবেশ = মিথ্যা
স্প্রিং বুট স্টার্টার এর 2.0.0 সংস্করণের জন্য, নিম্নলিখিত বৈশিষ্ট্যটি ব্যবহার করুন:
বসন্ত.মন.ওয়েব-অ্যাপ্লিকেশন-প্রকার = কোনওটি নয়
সমস্ত বৈশিষ্ট্যের নথির জন্য এই লিঙ্কটি ব্যবহার করুন: https://docs.spring.io/spring-boot/docs/current/references/html/common-application-properties.html
স্প্রিং বুট v2.1.3.RELEASE এর জন্য, কেবল প্রয়োগের মধ্যে অনুসরণ বৈশিষ্ট্য যুক্ত করুন p
spring.main.web-application-type=none
আপনার অ্যাপ্লিকেশনটিতে যদি আপনার ওয়েব কার্যকারিতা প্রয়োজন হয় (যেমন org.springframework.web.client.RestTemplate
REST কলগুলির জন্য) তবে আপনি কোনও টোম্যাক্যাট সার্ভার শুরু করতে চান না, কেবল এটি পিওএম-এ বাদ দিন:
<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);
অ্যাপ্লিকেশন.প্রপার্টি ফাইলের মাধ্যমে:
spring.main.web-environment=false
প্রয়োগ.আইএমএল ফাইলের মাধ্যমে:
spring:
main:
web-environment:false
আপনি যদি স্প্রিং.আইও সাইট থেকে "শুরু করা" টেম্পলেটগুলির একটি ব্যবহার করতে চান তবে আপনার "ডিফল্ট" ("জিএস / স্প্রিং-বুট") টেম্পলেট নিয়ে আসা সার্লেট-সম্পর্কিত কোনও জিনিস প্রয়োজন নেই, আপনি শিডিয়ুলিং-টাস্ক টেম্পলেট চেষ্টা করতে পারেন (যার পম * টি বসন্ত-বুট-স্টার্টার ইত্যাদি রয়েছে):
https://spring.io/guides/gs/schedolve-tasks/
এটি আপনাকে স্প্রিং বুট দেয় এবং অ্যাপটি স্ট্যান্ডলোন হিসাবে চালিত হয় (কোনও সার্লেট বা স্প্রিং-ওয়েবএমভিসি ইত্যাদি পোমের অন্তর্ভুক্ত নয়)। কোনটি আপনি চেয়েছিলেন (যদিও আপনার কিছু জেএমএস-নির্দিষ্ট জিনিস যুক্ত করার প্রয়োজন হতে পারে, যেমন ইতিমধ্যে অন্য কেউ নির্দেশ করেছেন)।
[* আমি মাভেন ব্যবহার করছি, তবে ধরে নিন যে একটি গ্রেডল বিল্ড একইভাবে কাজ করবে]।
কোটলিংয়ের জন্য এখানে আমি ইদানীং ব্যবহার করেছি:
// 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")
}
}
এবং বুট করা সমস্ত কিছুই সাধারণত আমার কাস্টম কমান্ডটি উপলব্ধ শেল দিয়ে শেষ হয়।
স্প্রিং বুটে, স্প্রিং ওয়েব নির্ভরতা এম্বেডড অ্যাপাচি টমক্যাট ওয়েব সার্ভার সরবরাহ করে। আপনি যদি বসন্ত-বুট-স্টার্টার-ওয়েব সরিয়ে দেন pom.xML এ নির্ভরতা অপসারণ করেন তবে এটি এম্বেডড ওয়েব সার্ভার সরবরাহ করে না।
নিম্নলিখিত নির্ভরতা অপসারণ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
স্প্রিং বুটে অনেক স্টার্টার থাকে, কিছু স্টার্টারের একটি এম্বেডেড ওয়েব সার্ভার থাকে, কিছু থাকে না। নিম্নলিখিত এম্বেড ওয়েব সার্ভার রয়েছে:
spring-boot-starter-web
spring-boot-starter-data-jpa
spring-boot-starter-jetty
spring-boot-starter-tomcat
spring-boot-starter-jdbc
spring-boot-starter-data-rest
...
আপনার প্রয়োজনীয়তা পূরণ করে এমন একটি চয়ন করুন এবং এতে সার্ভার সমর্থন নেই।
আমার বসন্ত অ্যাপ্লিকেশনটিতে আমাকে কেবল বিশ্রামের জন্য জসন এপিআই অনুরোধ করা দরকার, তাই আমার যে স্টার্টারটি প্রয়োজন তা হল
spring-boot-starter-json
যা সরবরাহ করে RestTemplate
এবং jackson
আমার ব্যবহারের জন্য।
উপরে উপরে @ নায়ুন ওহ উত্তরের মতো, তবে স্প্রিংয়ের পুরানো সংস্করণগুলির জন্য, এই কোডটি ব্যবহার করুন:
SpringApplication application = new SpringApplication(DemoApplication.class);
application.setApplicationContextClass(AnnotationConfigApplicationContext.class);
application.run(args);
spring-jms
নির্ভরতা হিসাবে যুক্ত করুন (আমার ধারণা)। তারপরে কেবল অ্যাপ্লিকেশনটি শুরু করুন, কোনও সার্ভার শুরু হবে না।