¡¡JPrime 2024 concluyó con éxito!!
Los organizadores de JPrime 2024 una vez más han hecho todo lo posible para ofrecer una amplia gama de temas, asegurando que haya algo para todos.
Sin embargo, el artículo de hoy no está motivado por una de las conferencias de Michael Simons sobre "La evolución de las pruebas de integración en Spring y Quarkus", aunque fue muy revelador. Exploró estrategias de pruebas de integración, centrándose en la configuración en Spring Boot.
El autor enfatizó claramente que los problemas que destacó se abordan de manera efectiva en Quarkus mediante la utilización de Dev Services (Figura 1). Esto resalta otra razón por la que veo Spring Boot con escepticismo para ciertas aplicaciones: sus complejidades contrastan marcadamente con las soluciones optimizadas de Quarkus, particularmente con el uso de Dev Services.
Figura 1: JPrime 2024
Fue notable presenciar el asombro que Dev Services provocó entre los nuevos asistentes. Sin embargo, es importante tener en cuenta que Dev Services no es una característica reciente de Quarkus; ha sido una parte integral del marco durante bastante tiempo. Profundicemos en Quarkus Dev Services y exploremos sus beneficios duraderos.
En Quarkus, los servicios de desarrollo facilitan el aprovisionamiento automático de servicios no configurados tanto en el modo de desarrollo como en el de prueba. Básicamente, si incluye una extensión sin configurarla, Quarkus iniciará automáticamente el servicio relevante (a menudo utilizando Testcontainers en segundo plano) y configurará su aplicación para usar este servicio de manera eficiente.
Detección y lanzamiento automático de servicios
Quarkus Dev Services automatiza la detección y el lanzamiento de servicios necesarios como bases de datos, intermediarios de mensajes y otros servicios backend. Esta función aprovecha las dependencias de la aplicación especificadas en pom.xml o build.gradle. Por ejemplo, agregar un controlador de base de datos activa automáticamente los servicios de desarrollo para activar una instancia en contenedor correspondiente de esa base de datos si aún no se está ejecutando. La tecnología utilizada aquí involucra principalmente Testcontainers, que permite la creación de instancias livianas y desechables de bases de datos comunes, navegadores web Selenium o cualquier otra cosa que pueda ejecutarse en un contenedor Docker.
Inyección de configuración dinámica
Una vez que se crean instancias de los servicios requeridos, Quarkus Dev Services inyecta dinámicamente los detalles de conexión del servicio relevante en la configuración de la aplicación en tiempo de ejecución. Esto se hace sin ninguna intervención manual, utilizando una característica conocida como Prueba Continua que redirige la base de datos estándar, u otras URL de servicio, a los contenedores de prueba autoaprovisionados. Las propiedades de configuración, como URL, credenciales de usuario y otros parámetros operativos, se establecen sin problemas, lo que permite que la aplicación interactúe con estos servicios como si estuvieran configurados manualmente.
Comportamientos específicos del servicio
Dev Services está diseñado para varios tipos de servicios:
Manejo de red y aislamiento de servicios
Cada servicio creado por Quarkus Dev Services se ejecuta en su entorno aislado. Esto es crucial para garantizar que no haya conflictos de puertos, residuos de datos o problemas de seguridad entre diferentes pruebas de desarrollo. A pesar de este aislamiento, los servicios se conectan en red de manera adecuada mediante Docker, lo que garantiza que puedan comunicarse entre sí según sea necesario, imitando una atmósfera de implementación del mundo real.
Gestión del ciclo de vida
Quarkus gestiona el ciclo de vida completo de estos servicios aprovisionados dinámicamente. Cuando inicia su aplicación en modo de desarrollo, los servicios necesarios se inician automáticamente. Cuando detiene la aplicación Quarkus, estos servicios también finalizan. Esta gestión incluye el manejo de la persistencia de los datos según sea necesario, lo que permite a los desarrolladores continuar justo donde lo dejaron sin demoras en la configuración.
Considere que está utilizando una base de datos PostgreSQL con Quarkus. Si no se detecta ninguna configuración de PostgreSQL existente, Quarkus iniciará un contenedor Docker de PostgreSQL y conectará su aplicación automáticamente.
Estos servicios están habilitados de forma predeterminada en los modos de desarrollo y prueba, pero se pueden deshabilitar si es necesario a través de application.properties:
quarkus.datasource.devservices.enabled=false
Ampliemos el escenario en el que Quarkus utiliza una base de datos PostgreSQL y cómo los servicios de desarrollo facilitan esto con el mínimo esfuerzo.
Si Quarkus detecta que no hay ninguna configuración de PostgreSQL activa (no en ejecución o no configurada explícitamente), iniciará automáticamente un contenedor de PostgreSQL usando Docker. Esto se configura detrás de escena a través de Dev Services.
Para interactuar con la base de datos a través de una capa ORM, considere usar Quarkus Panache, que simplifica las operaciones ORM de Hibernate. A continuación le indicamos cómo configurar su entorno:
Agregar dependencias
En primer lugar, incluye las dependencias necesarias en tu pom.xml:
io.quarkus quarkus-hibernate-orm-panache io.quarkus quarkus-jdbc-postgresql
Definir la entidad
A continuación, defina su entidad, como CityEntity:
@Entity @Table(name = "cities") public class CityEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Column(name = "public_id") private String publicId; @OneToOne private StateEntity state; @Column(nullable = false, name = "created_at") private Instant createdAt; @Column(nullable = false, name = "last_modified") private Instant lastModified; @PrePersist protected void onCreate() { createdAt = Instant.now(); lastModified = createdAt; } @PreUpdate protected void onUpdate() { lastModified = Instant.now(); } }
Crear el repositorio
Implementar el repositorio que interactuará directamente con la base de datos:
@ApplicationScoped public class CityRepository implements PanacheRepository{ }
Capa de servicio
Definir la capa de servicio que utiliza el repositorio:
@ApplicationScoped public class CityServiceImpl implements CityService { @Inject CityRepository cityRepository; @Override public long countCities() { return cityRepository.count(); } } public interface CityService { long countCities(); }
Punto final de recursos
@Path("/cities") @Tag(name = "City Resource", description = "City APIs") public class CityResource { @Inject CityService cityService; @GET @Path("/count") @Operation(summary = "Get the total number of cities", description = "Returns the total count of cities in the system.") @APIResponse(responseCode = "200", description = "Successful response", content = @Content(mediaType = "application/json", schema = @Schema(implementation = Long.class))) public long count() { return cityService.countCities(); } }
Cuando ejecute su aplicación Quarkus (mvn quarkus:dev), observe el inicio automático del contenedor PostgreSQL (Figura 2). Esta perfecta integración ejemplifica el poder de Quarkus Dev Services, simplificando significativamente el desarrollo y las pruebas al automatizar la configuración y la conexión a servicios externos necesarios para su aplicación.
Figura 2: Registros de aplicaciones
Quarkus Dev Services agiliza las fases de desarrollo y prueba al manejar la configuración y administración de varios servicios, lo que permite a los desarrolladores centrarse más en la aplicación real. Quarkus admite una amplia gama de servicios de desarrollo, que incluyen:
Quarkus Dev Services representa un cambio de paradigma en la forma en que los desarrolladores abordan la configuración e integración de servicios externos durante las fases de desarrollo y prueba. La automatización de la configuración del entorno no solo acelera el proceso de desarrollo sino que también reduce la posibilidad de errores de configuración, lo que facilita que los equipos se concentren en crear aplicaciones sólidas y ricas en funciones.
Una de las ventajas destacadas de Quarkus Dev Services es el énfasis en la productividad de los desarrolladores. Al eliminar la necesidad de administrar manualmente las dependencias de los servicios, los desarrolladores pueden comenzar a trabajar inmediatamente en la lógica empresarial y las características de las aplicaciones. Este flujo de trabajo optimizado es particularmente beneficioso en arquitecturas de microservicios donde múltiples servicios pueden requerir desarrollo e integración simultáneos
En conclusión, adoptar Quarkus Dev Services podría afectar significativamente la efectividad de su equipo de desarrollo y los resultados del proyecto. La simplicidad y el poder de Quarkus fomentan la experimentación,
iteraciones más rápidas y, en última instancia, un ciclo de desarrollo más rápido. Este tipo de apalancamiento tecnológico es lo que las empresas modernas necesitan para prosperar en la era digital.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3