Configuración avanzada
Las aplicaciones reales necesitan configuración flexible.
Por ejemplo:
- base de datos diferente en desarrollo y producción
- activar logs en desarrollo
- cambiar puertos
- configurar seguridad
- permitir acceso desde otros dominios
Spring Boot facilita todo esto mediante:
- archivos de configuración
- perfiles
- variables de entorno
1. Archivo de configuración #
El archivo principal es:
1application.properties
o
1application.yml
Se encuentra en:
1src/main/resources
2. Ejemplo de configuración #
1server.port=8081 2 3spring.datasource.url=jdbc:postgresql://localhost:5432/appdb 4spring.datasource.username=postgres 5spring.datasource.password=1234 6 7spring.jpa.show-sql=true
3. Explicación #
| propiedad | función |
|---|---|
| server.port | puerto del servidor |
| spring.datasource.url | conexión DB |
| spring.jpa.show-sql | mostrar SQL |
4. Usar YAML en lugar de properties #
Spring Boot también permite usar YAML.
Archivo:
1application.yml
5. Ejemplo #
1server: 2 port: 8081 3 4spring: 5 datasource: 6 url: jdbc:postgresql://localhost:5432/appdb 7 username: postgres 8 password: 1234 9 10 jpa: 11 show-sql: true
YAML es más legible cuando la configuración es grande.
6. Perfiles (profiles) #
Los perfiles permiten tener configuraciones diferentes.
Por ejemplo:
1dev 2test 3prod
7. Archivos de perfil #
Podemos crear:
1application-dev.properties 2application-prod.properties
8. Ejemplo #
application-dev.properties #
1server.port=8080 2spring.jpa.show-sql=true
application-prod.properties #
1server.port=80 2spring.jpa.show-sql=false
9. Activar perfil #
En application.properties:
1spring.profiles.active=dev
O en terminal:
1java -jar app.jar --spring.profiles.active=prod
10. Variables de entorno #
En producción normalmente no se guardan contraseñas en el código.
Se usan variables de entorno.
11. Ejemplo #
1spring.datasource.password=${DB_PASSWORD}
Spring tomará el valor desde el sistema.
12. Leer propiedades en el código #
Podemos acceder a propiedades usando @Value.
13. Ejemplo #
1@Value("${server.port}") 2private String port;
Esto lee el valor configurado.
14. Usar @ConfigurationProperties #
Para configuraciones grandes es mejor usar esta anotación.
15. Ejemplo #
1@ConfigurationProperties(prefix="app") 2public class AppConfig { 3 4 private String name; 5 private String version; 6 7}
16. Configuración #
1app.name=MiApp 2app.version=1.0
Spring inyectará automáticamente los valores.
17. Configurar CORS #
Cuando usamos frontend separado (Angular, React) puede aparecer un error CORS.
Ejemplo:
1Angular → localhost:4200 2Spring Boot → localhost:8080
El navegador bloquea la petición.
18. Solución #
1@Configuration 2public class CorsConfig { 3 4 @Bean 5 public WebMvcConfigurer corsConfigurer() { 6 7 return new WebMvcConfigurer() { 8 9 @Override 10 public void addCorsMappings(CorsRegistry registry) { 11 12 registry.addMapping("/**") 13 .allowedOrigins("http://localhost:4200") 14 .allowedMethods("*"); 15 16 } 17 18 }; 19 20 } 21 22}
19. Configurar logs #
Los logs ayudan a detectar problemas.
Spring Boot usa Logback.
20. Configuración simple #
1logging.level.root=INFO 2logging.level.org.springframework=DEBUG
21. Usar logs en código #
1import org.slf4j.Logger; 2import org.slf4j.LoggerFactory; 3 4private static final Logger log = 5 LoggerFactory.getLogger(UserService.class); 6 7log.info("Usuario creado");
22. Cambiar puerto del servidor #
Por defecto Spring Boot usa:
18080
Podemos cambiarlo.
23. Ejemplo #
1server.port=9090
Ahora la aplicación estará en:
1http://localhost:9090
24. Configuración por entorno #
Ejemplo típico real:
Desarrollo #
1application-dev.properties
1spring.jpa.show-sql=true 2logging.level.root=DEBUG
Producción #
1application-prod.properties
1spring.jpa.show-sql=false 2logging.level.root=INFO
25. Buenas prácticas #
No guardar contraseñas en código #
Usar variables de entorno.
Usar perfiles #
Separar dev y prod.
Usar logs adecuados #
No mostrar demasiados logs en producción.
Resumen del tema
Conceptos clave #
- Gestión de Propiedades (
application.properties/application.yml): jerarquía de configuración con soporte para inyección simple@Value("${prop}")y tipado seguro@ConfigurationProperties(prefix="app"). - Perfiles de Entorno (
spring.profiles.active): segregación de entornos (application-dev.yml,application-prod.yml) activables mediante CLI o variables del sistema. - Inyección de Secretos y Variables de Entorno: uso de la sintaxis
${DB_PASSWORD}para evitar credenciales hardcodeadas en el código fuente. - Habilitación de CORS (
WebMvcConfigurer): configuración de orígenes permitidos (allowedOrigins), cabeceras y métodos HTTP para clientes frontend (React, Angular, Vue). - Logging con SLF4J / Logback: niveles de traza (
TRACE,DEBUG,INFO,WARN,ERROR) configurables por paquete.
Qué debes recordar #
Externaliza la configuración con perfiles y variables de entorno (@ConfigurationProperties), habilita CORS según los orígenes clientes y gestiona logs con SLF4J.