without tutorial starter español application java spring-boot

java - tutorial - Spring Boot sin el servidor web



spring boot without web application (10)

Spring Boot 2.x

  • Propiedades de aplicacion

    spring.main.web-application-type=NONE # REACTIVE, SERVLET

  • o SpringApplicationBuilder

    @SpringBootApplication public class MyApplication { public static void main(String[] args) { new SpringApplicationBuilder(MyApplication.class) .web(WebApplicationType.NONE) // .REACTIVE, .SERVLET .run(args); } }

Donde WebApplicationType :

  • NONE : la aplicación no debe ejecutarse como una aplicación web y no debe iniciar un servidor web incorporado.
  • REACTIVE : la aplicación debe ejecutarse como una aplicación web reactiva y debe iniciar un servidor web reactivo incorporado.
  • SERVLET : la aplicación debe ejecutarse como una aplicación web basada en servlet y debe iniciar un servidor web de servlet incorporado.

Tengo una aplicación Spring Boot simple que recibe mensajes de una cola JMS y guarda algunos datos en un archivo de registro, pero no necesita un servidor web. ¿Hay alguna forma de iniciar Spring Boot sin el servidor web?


Eliminar la siguiente dependencia de su archivo pom funcionará para mí

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



Para Spring boot v2.1.3.RELEASE, simplemente agregue las siguientes propiedades en application.propertes:

spring.main.web-application-type=none


Puedes crear algo como esto:

@SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(false).run(args); } }

Y

@Component public class CommandLiner implements CommandLineRunner { @Override public void run(String... args) throws Exception { // Put your logic here } }

La dependencia todavía está ahí, pero no se usa.


Si desea ejecutar Spring Boot sin un contenedor de servlet, pero con uno en el classpath (por ejemplo, para pruebas), utilice lo siguiente, como se describe en la documentación de Spring Boot :

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

Además, me topé con esta propiedad:

spring.main.web-environment=false


Si desea utilizar una de las plantillas "Primeros pasos" del sitio spring.io, pero no necesita ninguno de los elementos relacionados con el servlet que viene con la plantilla "predeterminada" ("gs / spring-boot"), puede probar la plantilla de tareas de programación (cuyo pom * contiene spring-boot-starter, etc.) en su lugar:

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

Eso le da Spring Boot, y la aplicación se ejecuta de forma independiente (no se incluyen servlets o spring-webmvc, etc. en el pom). Que es lo que querías (aunque es posible que necesites agregar algunas cosas específicas de JMS, como ya señala alguien más).

[* Estoy usando Maven, pero supongo que una compilación de Gradle funcionará de manera similar].


Si necesita funcionalidad web en su aplicación (como org.springframework.web.client.RestTemplate para llamadas REST) ​​pero no desea iniciar un servidor TOMCAT, simplemente excluya en el 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>


Spring boot no incluirá tomcat incrustado si no tiene dependencias de Tomcat en el classpath. Puede ver este hecho usted mismo en la clase EmbeddedServletContainerAutoConfiguration cuya fuente puede encontrar here .

El @ConditionalOnClass del código es el uso de la anotación @ConditionalOnClass en la clase EmbeddedTomcat

Además, para obtener más información, consulte this y this guía y docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… parte de la documentación


  • A través del programa:

    ConfigurableApplicationContext ctx = new SpringApplicationBuilder(YourApplicationMain.class) .web(WebApplicationType.NONE) .run(args);

  • A través del archivo application.properties:

    spring.main.web-environment=false

  • A través del archivo application.yml:

    spring: main: web-environment:false