Spring Boot Profiles | Parte 2

Spring Boot Profiles | Parte 2

En este tutorial utilizare Spring Boot Profiles con inyección de dependencias de Spring Framework para manejar las instancias de la capa de servicios.

Spring Boot Profiles nos permite configurar la aplicación por ambientes como de desarrollo, QA y/o producción como pudiste ver en el tutorial anterior. (http://cristianruizblog.com/spring-boot-profiles-parte-1/).

Si apenas estas empezando y conociendo Spring Framework esto puede ser un poco confuso para ti. Pero Sigue leyendo, lo explicare minuciosamente paso a paso para que lo puedas entender.

Escenario

Supongamos que tenemos una aplicación web local que puede ser ejecutada en varios sistemas operativos como Windows, Linux y MacOs. Pero cada uno tiene su configuración individual, como por ejemplo puertos, servicios, rutas, etc.

Ejemplo de lo que construiremos utilizando profiles:

Profiles Services Escenario
Profiles Services Escenario

En este caso tendremos 3 implementaciones del servicio SistemaOperativoService y utilizando la anotación @Profile Spring Boot decidirá cual implementación instanciar.

Ejecución

Necesitaremos ejecutar los siguientes pasos.

  1. Crear un proyecto Spring Boot web con las siguientes dependencias (Web, Thymeleaf) devtools es opcional.
  2. Crear la comunicación base de Vista a Controlador:
    1. Crear un DemoController con un metodo que cargue la vista index
    2. Crear un html llamado index y escribe la estructura básica.
  3.  Crea una interface de servicio
  4. Crea tres clases que implementen la interface anterior y anotarlas con @Service y @Profile respectivamente (Win,Mac,Linux)
  5. Agrega la propiedad de perfiles activos en application.properties
  6. Inicia Spring Boot.

Tu estructura de carpetas deberá ser similar a esto.

Estructura para proyecto service profile
Estructura para proyecto service profile

DemoController.java

@Controller
public class DemoController {
	@Autowired
	private SistemaOperativoService sistemaOperativoService;
	
	@GetMapping
	public String index(Model model) {
		model.addAttribute("os",sistemaOperativoService.getSitemaOperativo());
		return "index";
	}
}

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>Systema Operativo</h1>
    <h2 th:text="${os}">...</h2>
</body>
</html>

SistemaOperativoService.java

public interface SistemaOperativoService {

	public String getSitemaOperativo();
}

SistemaOperativoServiceImpl.java

// @Service Marca esta clase como un componente
// y lo carga dentro del contexto de spring boot
// siempre y cuando corresponda al perfil activo
@Service
@Profile("default")
public class SistemaOperativoServiceImpl 
                   implements SistemaOperativoService {

    @Override
    public String getSitemaOperativo() {
        return "WIN10";
    }
}

SistemaOperativoServiceLinux.java

// @Service Marca esta clase como un componente
// y lo carga dentro del contexto de spring boot
// siempre y cuando corresponda al perfil activo
@Service
@Profile("LINUX")
public class SistemaOperativoServiceLinux 
                       implements SistemaOperativoService {

    @Override
    public String getSitemaOperativo() {
        return "Linux";
    }
}

SistemaOperativoServiceMac.java

// @Service Marca esta clase como un componente
// y lo carga dentro del contexto de spring boot
// siempre y cuando corresponda al perfil activo
@Service
@Profile("MAC")
public class SistemaOperativoServiceMac 
                  implements SistemaOperativoService {

    @Override
    public String getSitemaOperativo() {
        return "MacOS";
    }
}

application.properties

spring.profiles.active= LINUX

En el siguiente Video podrás ver esto puesto a practica, ademas ire explicando paso a paso e introduciendo la famosa propiedad de Spring Framework llamada Inyección de dependencias.

Github Repository: https://github.com/cruizg93/CristianRuizBlog-SpringBootProfileServices

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *