starter español embebido deploy java spring maven spring-mvc tomcat

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 -

  1. Actualiza la clase principal de su aplicación para extender SpringBootServletInitializer .

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

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

  1. Cambia el envase de la jar a la war .

  2. Comente la declaración del spring-boot-maven-plugin plugin en su pom.xml

  3. Agregue un punto de entrada web a su aplicación al extender SpringBootServletInitializer y anular el método de configure

  4. Elimine la spring-boot-starter-tomcat dependency y modifique su spring-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.

  1. Hacer el embalaje en el pom un WAR.

    <packaging>war</packaging>

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

  3. Utilicé una clase de aplicación para mantener el main (). Main tenía un código de configuración para poder inyectar EntityManager etc. Este EntityManager utilizó información de los archivos ApplicationContext y persistence.xml para obtener información de persistencia. Trabajó bien bajo SpringBoot pero no bajo Tomcat. De hecho, bajo Tomcat el Main() no se llama. La clase de aplicación extiende SpringBootServletInitializer .

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

  1. Las anotaciones necesarias son:

    @EnableAutoConfiguration @ComponentScan //@SpringBootApplication will consist of both of these and @Configuration

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