java - tutorial - Spring Boot sin el servidor web
spring boot without web application (10)
Spring Boot 2.x
-
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); } }
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>
La solución más simple. en su archivo application.properties. agregue la siguiente propiedad como se menciona en una respuesta anterior:
spring.main.web-environment = false
Para la versión 2.0.0 de Spring boot starter, use la siguiente propiedad:
spring.main.web-application-type = none
Para obtener documentación sobre todas las propiedades, utilice este enlace: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
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