Подтвердить что ты не робот

Spring Загрузка без веб-сервера

У меня есть простое приложение загрузки Spring, которое получает сообщения из очереди JMS и сохраняет некоторые данные в файле журнала, но не нуждается в веб-сервере. Есть ли способ запуска Spring Загрузка без веб-сервера?

4b9b3361

Ответ 1

Spring boot не будет включать встроенный tomcat, если у вас нет зависимостей Tomcat от пути к классам. Вы можете просмотреть этот факт самостоятельно в классе EmbeddedServletContainerAutoConfiguration, источник которого вы можете найти здесь.

Мяч кода - это использование аннотации @ConditionalOnClass для класса EmbeddedTomcat


Кроме того, для получения дополнительной информации ознакомьтесь с этим и этим руководством и этой части документации

Ответ 2

если вы хотите запустить загрузку spring без контейнера сервлета, но с одним из путей к классам (например, для тестов), используйте следующее, как описано в spring загрузочная документация:

@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

Ответ 3

Spring Boot 2.x

  • Свойства приложения

    spring.main.web-application-type=NONE 
    # REACTIVE, SERVLET
    
  • или SpringApplicationBuilder

    @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 - приложение должно работать как веб-приложение на основе сервлета и должно запускать встроенный веб-сервер сервлета.

Ответ 4

Вы можете создать что-то вроде этого:

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

}

Зависимость все еще существует, но не используется.

Ответ 5

Самое простое решение. в вашем файле application.properties. добавьте следующее свойство, как указано в предыдущем ответе:

spring.main.web-среда = ложь

Для версии 2.0.0 загрузчика Spring используйте следующее свойство:

не spring.main.web-приложений типа = нет

Для документации по всем свойствам используйте эту ссылку: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

Ответ 6

Если вы хотите использовать один из шаблонов "Начало работы" с сайта spring.io, но вам не нужен какой-либо материал, связанный с сервлетом, который поставляется со значением "по умолчанию" ( "gs/spring -boot" ), вы можете попробовать шаблон scheduling-tasks (чей pom * содержит spring -boot-starter и т.д.):

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

Это дает вам Spring Boot, и приложение работает как автономное (сервлеты или spring -webmvc и т.д. не включены в pom). Это то, что вы хотели (хотя вам может понадобиться добавить некоторые JMS-специфические вещи, как уже указывает кто-то другой).

[* Я использую Maven, но предположим, что сборка Gradle будет работать аналогично].

Ответ 7

Если вам требуется веб-функциональность в вашем приложении (например, org.springframework.web.client.RestTemplate для вызовов REST), но вы не хотите запускать сервер TOMCAT, просто исключите его в POM:

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

Ответ 8

Для Spring boot v2.1.3.RELEASE просто добавьте следующие свойства в application.propertes:

spring.main.web-application-type=none

Ответ 9

  • Через программу:

    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
    

Ответ 10

Удаление следующей зависимости от вашего pom файла будет работать для меня

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