java - español - spring boot war external tomcat
Cómo implementar la aplicación web spring boot en el servidor tomcat (5)
He creado la aplicación web spring boot, pero no puedo desplegar el archivo WAR de la aplicación web spring boot en tomcat y puedo ejecutarlo como aplicación java. Cómo ejecutar la aplicación spring boot como servicio web en tomcat. Estoy usando el siguiente código. Si es posible ejecutarlo en Tomcat Plz, ayúdeme a usar anotaciones sin usar web.xml y con usar web.xml.
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Código siguiente para el controlador de descanso
@RestController
public class HelloWorld{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public ResponseEntity<String> get() {
return new ResponseEntity<String>("Hello World", HttpStatus.OK);
}
}
Siguiendo Pom.xml estoy usando
<groupId>org.springframework</groupId>
<artifactId>web-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.6</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
<packaging>war</packaging>
Aquí hay dos buenas documentaciones sobre cómo implementar la aplicación Spring Boot
como un archivo de war
.
Puede seguir esta primavera howto-traditional-deployment documentación de howto-traditional-deployment -
Pasos según esta documentación -
Actualiza la clase principal de su aplicación para extender
SpringBootServletInitializer
.El siguiente paso es actualizar la configuración de compilación para que su proyecto produzca un archivo war en lugar de un archivo jar.
<packaging>war</packaging>
Marque la dependencia del contenedor de servlet incrustado como se proporciona.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
y una forma más -
Consulte esta documentación de Spring Iio que describe cómo implementar la aplicación Spring Boot en un servidor de aplicaciones.
Pasos
Cambia el envase de la
jar
a lawar
.Comente la declaración del
spring-boot-maven-plugin
plugin en supom.xml
Agregue un punto de entrada web a su aplicación al extender
SpringBootServletInitializer
y anular el método deconfigure
Elimine la
spring-boot-starter-tomcat dependency
y modifique suspring-boot-starter-tomcat dependency
spring-boot-starter-web
para
<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>
En tu pom.xml
, elimina spring-beans
dependencias de spring-beans
y spring-webmvc
. La dependencia de spring-boot-starter-web
incluirá esas dependecies.
El proceso de conversión de un contenedor de arranque de resorte a una guerra de arranque de resorte se documenta en: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-maven-packaging Long cuento, establezca su clase de inicio como lo hizo en su ejemplo y luego cambie el empaque de jar a war en el archivo .pom. Además, debe configurar la dependencia spring-boot-starter-tomcat como proporcionada. Una vez más, el proceso se documenta en su forma completa en el enlace anterior. Más información sobre este tema está disponible en la guía de Spring io, "Convertir una aplicación JAR de Spring Boot en un WAR", que está disponible en https://spring.io/guides/gs/convert-jar-to-war/ Si i Puede ser de alguna ayuda, hágamelo saber y le ayudaré.
Marque la dependencia spring-boot-starter-tomcat
como se provided
, como:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
Nota 1: elimine las dependencias redundantes de su pom.xml
como:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
Son parte de los paquetes de arranque de arranque de primavera
Nota 2: Hacer jarra no guerra.
Me enfrenté a este problema. Gran parte de lo anterior es un buen consejo. Mi problema fue implementar inicialmente en el servidor Pivotal TC.
Hacer el embalaje en el pom un WAR.
<packaging>war</packaging>
Añadir dependencias al pom.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
Utilicé una clase de aplicación para mantener el main (). Main tenía un código de configuración para poder inyectar
EntityManager
etc. EsteEntityManager
utilizó información de los archivosApplicationContext
ypersistence.xml
para obtener información de persistencia. Trabajó bien bajo SpringBoot pero no bajo Tomcat. De hecho, bajo Tomcat elMain()
no se llama. La clase de aplicación extiendeSpringBootServletInitializer
.El siguiente método se agrega a la clase de aplicación:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { Application obj = new Application(); @SuppressWarnings("resource") ConfigurableApplicationContext applicationContext = new ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml"); applicationContext.registerShutdownHook(); applicationContext.getBeanFactory().autowireBeanProperties( obj, AutowireCapableBeanFactory.AUTOWIRE_NO, false); return application.sources(Application.class); }
Solo se requiere la última línea: el otro código se EntityManager
en main()
antes y se movió aquí para que la inyección del EntityManager
funcione.
Las anotaciones necesarias son:
@EnableAutoConfiguration @ComponentScan //@SpringBootApplication will consist of both of these and @Configuration
Algunas urls ahora pueden necesitar que el contexto raíz cambie para incluir
<artifactId>contextname</artifactId>.
Espero que ayude
Spring Boot ofrece la opción de implementar la aplicación como un archivo war tradicional en el servlet 3.x
( sin web.xml ) que admita el servidor tomcat. Por favor, consulte la documentación de Spring Boot para esto. Te informaré de lo que debes hacer aquí.
paso 1 : modifica pom.xml
para cambiar el paquete a war: (lo que ya hiciste)
<packaging>war</packaging>
paso 2 : cambia tu dependencia
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
a
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
paso 3 : modifique su nombre de guerra (si necesita evitar los detalles de la versión adjuntos con el nombre de guerra) en pom.xml
bajo la etiqueta <build>
.
<build>
<finalName>web-service</finalName>
.....
paso 4 : ejecute maven build para crear war: clean install
paso 5: implemente el archivo war generado web-service.war
en tomcat y solicite la url en el navegador http://<tomcat ip>:<tomcat port>/web-service/hello
Deberías conseguir Hello World
.
Nota: También puede eliminar las dependencias redundantes como dijo @Ali Dehghani.