Spring Boot 3.1.0-RC1: Service Connections
- EN
- ES
Spring Boot 3.1.0-RC1 ha sido liberado durante el fin de semana, en Spring Boot 3.1.0-M2: Service Connections mencionamos la introducción de nuevas anotaciones para el manejo de conexiones a servicios externos. En esta versión han habido algunos cambios.
Se ha agregado un nuevo módulo llamado
spring-boot-testcontainers
que se encarga de crear los beans basados en las implementation de Testcontainers para que puedan ser usados en nuestros tests y en modo desarrollo 👀@ServiceConnection
es la única anotación necesaria para acompañar a@Container
y dejar que Spring Boot realice la autoconfiguración de los beans.
Nuestro test ahora quedaría de la siguiente manera:
@Container
@ServiceConnection // (1)
private static final PostgreSQLContainer<?> postgresContainer = new PostgreSQLContainer<>("postgres:12")
.withCopyFileToContainer(MountableFile.forClasspathResource("schema.sql"), "/docker-entrypoint-initdb.d/schema.sql");
@ServiceConnection
hace el mapeo respectivo de las propiedades de Spring Boot con los valores que provee Testcontainers.
Pero eso no es todo, ahora podemos declarar PostgreSQLContainer
como @Bean
acompañado de @ServiceConnection
y
Spring Boot se encargará de la autoconfiguración y se puede ejecutar la aplicación. Para esto puedes crear una clase con
el método main
en src/test/java
y ejecutarlo.
public class TestDemoApplication {
public static void main(String[] args) {
SpringApplication.from(DemoApplication::main).with(DemoConfiguration.class).run(args);
}
@TestConfiguration(proxyBeanMethods = false)
static class DemoConfiguration {
@Bean
@ServiceConnection
public PostgreSQLContainer<?> redisContainer() {
PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:12")
.withCopyFileToContainer(MountableFile.forClasspathResource("schema.sql"), "/docker-entrypoint-initdb.d/schema.sql");
return postgres;
}
@Bean
ApplicationRunner runner(JdbcTemplate jdbcTemplate) {
return args -> {
jdbcTemplate.queryForList("SELECT name, lastname FROM users")
.forEach(System.out::println);
};
}
}
}
Por motivos de pruebas, agrega la siguiente dependencia org.springframework.boot:spring-boot-starter-web
a tu pom.xml
o build.gradle
. La aplicación se ejecutará conectada a una base de datos postgres corriendo en un contenedor.
Ya puedes visitar Spring Initializr y generar un proyecto con Spring Boot 3.1.0-RC1.
Puedes revisar la documentación oficial de Service Connections y en Modo Desarrollo con Testcontainers.
Por cierto, ¿sabías de la existencia de los módulos que provee Testcontainers? Puedes revisarlos en el catálogo de módulos.