ওয়েব সার্ভার ছাড়াই স্প্রিং বুট


113

আমার কাছে একটি সহজ স্প্রিং বুট অ্যাপ্লিকেশন রয়েছে যা একটি জেএমএস সারি থেকে বার্তা পেয়েছে এবং লগ ফাইলে কিছু ডেটা সংরক্ষণ করে, তবে ওয়েব সার্ভারের প্রয়োজন হয় না। ওয়েব সার্ভার ছাড়া স্প্রিং বুট শুরু করার কোনও উপায় আছে কি?


4
আপনার যদি ওয়েবের প্রয়োজন না হয় তবে এটি অন্তর্ভুক্ত করবেন না, যখন অন্তর্ভুক্ত নয় এম্বেড থাকা সার্ভারটি শুরু হবে না। আপনার কেবল স্টার্টার প্যারেন্ট প্রয়োজন হবে এবং spring-jmsনির্ভরতা হিসাবে যুক্ত করুন (আমার ধারণা)। তারপরে কেবল অ্যাপ্লিকেশনটি শুরু করুন, কোনও সার্ভার শুরু হবে না।
এম। ডিনুম


4
আপনি ভুল, আমি কেবল স্প্রিং-বুট-স্টার্টার-ব্যাচ ব্যবহার করি, আমি আমার পম.এক্সএমএলে কোনও টমক্যাট বা অন্য সার্ভার কনফিগারেশনটি অন্তর্ভুক্ত করি না, তবে অ্যাপ্লিকেশনটি কার্যকর করে একটি ওয়েব ধারক চালু করে। এটি অবশ্যই কোথাও একটি প্যারামিটার নিতে হবে।
মেহেদী

উত্তর:


24

ক্লাসপথে টমক্যাট নির্ভরতা না থাকলে স্প্রিং বুটে এম্বেডড টমক্যাট অন্তর্ভুক্ত হবে না। EmbeddedServletContainerAutoConfigurationযার উত্স আপনি এখানে খুঁজে পেতে পারেন সেই ক্লাসে আপনি নিজেই এই সত্যটি দেখতে পারেন ।

কোডের মাংস হ'ল @ConditionalOnClassক্লাসে টীকাগুলির ব্যবহারEmbeddedTomcat


এছাড়াও, আরও তথ্যের জন্য এটি এবং এই গাইড এবং ডকুমেন্টেশনের এই অংশটি দেখুন


তার বর্তমান সংস্করণে, gs-convert-jar-to-war/completeম্যাভেন প্রকল্পের নেই একটি এমবেডেড হুল বিড়াল সার্ভার যোগ থাকা সত্ত্বেও spring-boot-starter-tomcatনির্ভরতা সুযোগ ঘোষিত provided। এটি একটি বাগের মতো অনুভব করে। এছাড়াও স্ট্যাকওভারফ্লো.com
q/

140

আপনি যদি কোনও সার্লেট কন্টেইন ছাড়াই বসন্ত বুট চালাতে চান তবে ক্লাসপাথের একটিতে (যেমন পরীক্ষার জন্য), বসন্ত বুটের ডকুমেন্টেশনে বর্ণিত হিসাবে নিম্নলিখিতটি ব্যবহার করুন :

@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

12
সম্পত্তিকে application.propertiesপুরোপুরি সূক্ষ্মভাবে কাজ করার জন্য যুক্ত করা ।
উইম দেবলাউউ

8
এটি কাজ করে তবে স্প্রিং বুট ২.০ এ নষ্ট হয়। ২.০ সংস্করণের জন্য এই উত্তরটি দেখুন: stackoverflow.com/a/44394305/66686
জেনস স্কাউডার

4
এফওয়াইআই: এই সম্পত্তিটি spring.main.web-environmentএখন অবচয় করা হয়েছে। এখনও বুট 2.1.1 এর জন্য কাজ করে
সের্গেই কার্পুশিন

4
বুট 2.x - application.setWeb অ্যাপ্লিকেশন টাইপ (ওয়েব অ্যাপ্লিকেশনটাইপ.নোন);
মাইকেল মুন্সি

4
আজকাল তুমি কি ব্যবহার করতে অনুমিত করছিspring.main.web-application-type=none
damd

105

স্প্রিং বুট 2.x


যেখানে ওয়েব অ্যাপ্লিকেশন টাইপ :

  • NONE - অ্যাপ্লিকেশনটি কোনও ওয়েব অ্যাপ্লিকেশন হিসাবে চলবে না এবং এম্বেড থাকা ওয়েব সার্ভারটি শুরু করা উচিত নয়।
  • REACTIVE - অ্যাপ্লিকেশনটির একটি প্রতিক্রিয়াশীল ওয়েব অ্যাপ্লিকেশন হিসাবে চালানো উচিত এবং একটি এমবেডেড প্রতিক্রিয়াশীল ওয়েব সার্ভার শুরু করা উচিত।
  • SERVLET - অ্যাপ্লিকেশনটি সার্লেট-ভিত্তিক ওয়েব অ্যাপ্লিকেশন হিসাবে চলতে হবে এবং এমবেডড সার্ভলেট ওয়েব সার্ভারটি শুরু করা উচিত।

54

আপনি এই জাতীয় কিছু তৈরি করতে পারেন:

@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
  }

}

নির্ভরতা এখনও সেখানে রয়েছে তবে ব্যবহৃত হয়নি।


আমরা কী স্প্রিং-বুট-স্টার্টার-ওয়েব নির্ভরতা মুছে ফেলাতে পারি? এখন অ্যাপ্লিকেশনটিকে অ-ওয়েব করা এবং এই নির্ভরতা অপসারণের জন্য ব্যতিক্রম ঘটে ক্লাসনোটফাউন্ড: javax.servlet.SerleContext
সাইমন লজিক

দয়া করে মনে রাখবেন, সমাধান 1
অবমানিত

11

সহজ সমাধান। আপনার application.properties ফাইল এ। পূর্ববর্তী উত্তরে উল্লিখিত সম্পত্তি হিসাবে যুক্ত করুন:

বসন্ত.মন.ওয়েব-পরিবেশ = মিথ্যা

স্প্রিং বুট স্টার্টার এর 2.0.0 সংস্করণের জন্য, নিম্নলিখিত বৈশিষ্ট্যটি ব্যবহার করুন:

বসন্ত.মন.ওয়েব-অ্যাপ্লিকেশন-প্রকার = কোনওটি নয়

সমস্ত বৈশিষ্ট্যের নথির জন্য এই লিঙ্কটি ব্যবহার করুন: https://docs.spring.io/spring-boot/docs/current/references/html/common-application-properties.html


9

এই কোড ব্যবহার করুন।

SpringApplication application = new SpringApplication(DemoApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);

8

স্প্রিং বুট v2.1.3.RELEASE এর জন্য, কেবল প্রয়োগের মধ্যে অনুসরণ বৈশিষ্ট্য যুক্ত করুন p

spring.main.web-application-type=none

4

আপনার অ্যাপ্লিকেশনটিতে যদি আপনার ওয়েব কার্যকারিতা প্রয়োজন হয় (যেমন org.springframework.web.client.RestTemplateREST কলগুলির জন্য) তবে আপনি কোনও টোম্যাক্যাট সার্ভার শুরু করতে চান না, কেবল এটি পিওএম-এ বাদ দিন:

<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>

4
  • প্রোগ্রামের মাধ্যমে:

    ConfigurableApplicationContext ctx =  new  SpringApplicationBuilder(YourApplicationMain.class)
    .web(WebApplicationType.NONE)
    .run(args);
    
  • অ্যাপ্লিকেশন.প্রপার্টি ফাইলের মাধ্যমে:

    spring.main.web-environment=false 
    
  • প্রয়োগ.আইএমএল ফাইলের মাধ্যমে:

    spring:
     main:
      web-environment:false
    

2

আপনি যদি স্প্রিং.আইও সাইট থেকে "শুরু করা" টেম্পলেটগুলির একটি ব্যবহার করতে চান তবে আপনার "ডিফল্ট" ("জিএস / স্প্রিং-বুট") টেম্পলেট নিয়ে আসা সার্লেট-সম্পর্কিত কোনও জিনিস প্রয়োজন নেই, আপনি শিডিয়ুলিং-টাস্ক টেম্পলেট চেষ্টা করতে পারেন (যার পম * টি বসন্ত-বুট-স্টার্টার ইত্যাদি রয়েছে):

https://spring.io/guides/gs/schedolve-tasks/

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

[* আমি মাভেন ব্যবহার করছি, তবে ধরে নিন যে একটি গ্রেডল বিল্ড একইভাবে কাজ করবে]।


2

আপনার পম ফাইলে ফলোয়িং নির্ভরতা সরিয়ে ফেলুন আমার পক্ষে কাজ করবে

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

2

কোটলিংয়ের জন্য এখানে আমি ইদানীং ব্যবহার করেছি:


// 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")
    }
}

এবং বুট করা সমস্ত কিছুই সাধারণত আমার কাস্টম কমান্ডটি উপলব্ধ শেল দিয়ে শেষ হয়।


1

আপনি বসন্ত-বুট-স্টার্টার নির্ভরতা ব্যবহার করতে পারেন। এটিতে ওয়েব স্টাফ থাকবে না।

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>

1

স্প্রিং বুটে, স্প্রিং ওয়েব নির্ভরতা এম্বেডড অ্যাপাচি টমক্যাট ওয়েব সার্ভার সরবরাহ করে। আপনি যদি বসন্ত-বুট-স্টার্টার-ওয়েব সরিয়ে দেন pom.xML এ নির্ভরতা অপসারণ করেন তবে এটি এম্বেডড ওয়েব সার্ভার সরবরাহ করে না।

নিম্নলিখিত নির্ভরতা অপসারণ

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

দ্রষ্টব্য: প্রারম্ভিকদের আদর্শভাবে প্যারেন্ট POM হওয়া উচিত, নির্ভরতা নয়
ওয়ান ক্রিকেটার ২te

1

স্প্রিং বুটে অনেক স্টার্টার থাকে, কিছু স্টার্টারের একটি এম্বেডেড ওয়েব সার্ভার থাকে, কিছু থাকে না। নিম্নলিখিত এম্বেড ওয়েব সার্ভার রয়েছে:

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আমার ব্যবহারের জন্য।


0

উপরে উপরে @ নায়ুন ওহ উত্তরের মতো, তবে স্প্রিংয়ের পুরানো সংস্করণগুলির জন্য, এই কোডটি ব্যবহার করুন:

SpringApplication application = new SpringApplication(DemoApplication.class);
application.setApplicationContextClass(AnnotationConfigApplicationContext.class);
application.run(args);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.