Curso de Spring Boot

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

14.1 Archivo de configuración

El archivo principal es:

1application.properties

o

1application.yml

Se encuentra en:

1src/main/resources

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

Explicación

propiedadfunción
server.portpuerto del servidor
spring.datasource.urlconexión DB
spring.jpa.show-sqlmostrar SQL

14.3 Usar YAML en lugar de properties

Spring Boot también permite usar YAML.

Archivo:

1application.yml

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.


14.4 Perfiles (profiles)

Los perfiles permiten tener configuraciones diferentes.

Por ejemplo:

1dev
2test
3prod

14.5 Archivos de perfil

Podemos crear:

1application-dev.properties
2application-prod.properties

Ejemplo

application-dev.properties

1server.port=8080
2spring.jpa.show-sql=true

application-prod.properties

1server.port=80
2spring.jpa.show-sql=false

14.6 Activar perfil

En application.properties:

1spring.profiles.active=dev

O en terminal:

1java -jar app.jar --spring.profiles.active=prod

14.7 Variables de entorno

En producción normalmente no se guardan contraseñas en el código.

Se usan variables de entorno.


Ejemplo

1spring.datasource.password=${DB_PASSWORD}

Spring tomará el valor desde el sistema.


14.8 Leer propiedades en el código

Podemos acceder a propiedades usando @Value.


Ejemplo

1@Value("${server.port}")
2private String port;

Esto lee el valor configurado.


14.9 Usar @ConfigurationProperties

Para configuraciones grandes es mejor usar esta anotación.


Ejemplo

1@ConfigurationProperties(prefix="app")
2public class AppConfig {
3
4    private String name;
5    private String version;
6
7}

Configuración

1app.name=MiApp
2app.version=1.0

Spring inyectará automáticamente los valores.


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


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}

14.11 Configurar logs

Los logs ayudan a detectar problemas.

Spring Boot usa Logback.


Configuración simple

1logging.level.root=INFO
2logging.level.org.springframework=DEBUG

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");

14.12 Cambiar puerto del servidor

Por defecto Spring Boot usa:

18080

Podemos cambiarlo.


Ejemplo

1server.port=9090

Ahora la aplicación estará en:

1http://localhost:9090

14.13 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

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

  • Loading...