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:
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.
- Crear un proyecto Spring Boot web con las siguientes dependencias (Web, Thymeleaf) devtools es opcional.
- Crear la comunicación base de Vista a Controlador:
- Crear un DemoController con un metodo que cargue la vista index
- Crear un html llamado index y escribe la estructura básica.
- Crea una interface de servicio
- Crea tres clases que implementen la interface anterior y anotarlas con @Service y @Profile respectivamente (Win,Mac,Linux)
- Agrega la propiedad de perfiles activos en application.properties
- Inicia Spring Boot.
Tu estructura de carpetas deberá ser similar a esto.
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