Antes de comenzar quizás te interese leer :

Es turno para que usemos Spring Boot con una configración manual y ejecutemos nuestra aplicación con Payara Micro y no con un Tomcat embebido.


Pasos

  1. Crear un proyecto Maven Web
  2. Agregar la dependencia de Servlet 3.0
  3. Agregar dependencias de Spring Boot
  4. Configurar arranque de Spring Boot
  5. Agregar un Controller
  6. Ejecutar la aplicacion


1. Crear un proyecto Maven Web

$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=org.acme -DartifactId=spring-boot-payara -Dversion=1.0 --batch-mode

Esto nos crea un proyecto Web clásico. Es decir debemos hacer un pequeño cambio para colocar la versión servlet 3.0. Colocamos el siguiente contenido dentro del archivo web.xml.


1
2
3
4
5
6
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

</web-app>


2. Agregar la dependencia de Servlet 3.0

En nuestro pom.xml :

1
2
3
4
5
6
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>


3. Agregar dependencias de Spring Boot

Spring Boot usa dependencias configuradas como parent. Pero no lo vamos hacer asi ya que nuestro proyecto puede depender de un parent de nosotros mismos. Usaremos el sistema de <dependencyManagement> de Maven para esto. En nuestro pom.xml:

1
2
3
4
5
6
7
8
9
10
11
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.3.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


Agregamos el starter para web spring-boot-starter-web. Esta dependencia por defecto incluye Tomcat. Lo vamos excluir ya que no lo usaremos.

1
2
3
4
5
6
7
8
9
10
<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>


4. Configurar arranque de Spring Boot

Ahora debemos crear una clase para el arranque y configuración automática de Spring Boot. Esto es similar a la clase que Spring Boot agrega por defecto cuando creamos el proyecto con el mismo.

En la ruta src/main/java/org/acme :

package org.acme;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }

}


5. Agregar un Controller

Creamos una clase controller en el paquete org.acme :

1
2
3
4
5
6
7
8
9
10
11
package org.acme;

@Controller
public class HelloController {

    @RequestMapping("/")
    @ResponseBody
    public String hello(){
        return "Hola Mundo";
    }
}


6. Ejecutar la aplicacion

Ahora solo compilamos, empaquetamos y corremos la aplicacion:

$ mvn package


Desde el directorio target corremos la aplicación. Ten en cuenta que tu versión de Payara puede ser diferente:

$ java -jar payara-micro-4.1.1.161.1.jar --deploy spring-boot-payara-1.0.war


Ahora tenemos nuestra aplicación corriendo con un servidor Payara Micro.

Ya podemos navegar a la URL localhost:8080/spring-boot-payara

Notas Finales

De esta manera podemos usar Spring Boot en cualquier servidor o contenedor de aplicaciones. El procedimiento es similar cuando quieras usar por ejemplo WildFly Swarm.


Franky Villadiego

Volando hacia el desarrollo productivo!