JPrime 2024 s'est terminé avec succès !!
Les organisateurs de JPrime 2024 se sont encore une fois donné beaucoup de mal pour proposer une gamme diversifiée de sujets, garantissant qu'il y en ait pour tous les goûts.
Cependant, l'article d'aujourd'hui n'est pas déclenché par l'une des conférences de Michael Simons sur "L'évolution des tests d'intégration au sein de Spring et Quarkus" bien qu'il ait été très instructif. Il a exploré les stratégies de tests d'intégration, en se concentrant sur la configuration dans Spring Boot.
L'auteur a clairement souligné que les problèmes qu'il a soulignés sont efficacement résolus dans Quarkus grâce à l'utilisation des services de développement (Figure 1). Cela met en évidence une autre raison pour laquelle je considère Spring Boot avec scepticisme à l'égard de certaines applications : ses complexités contrastent fortement avec les solutions rationalisées de Quarkus, en particulier avec l'utilisation des services de développement.
Figure 1 – JPrime 2024
Il était remarquable de constater l'étonnement que Dev Services a suscité parmi les nouveaux participants. Cependant, il est important de noter que Dev Services n'est pas une fonctionnalité récente de Quarkus ; cela fait partie intégrante du cadre depuis un certain temps. Approfondissons les services de développement Quarkus et explorons ses avantages durables.
Dans Quarkus, les services de développement facilitent le provisionnement automatique de services non configurés en mode développement et test. Essentiellement, si vous incluez une extension sans la configurer, Quarkus lancera automatiquement le service concerné (en utilisant souvent Testcontainers en arrière-plan) et configurera votre application pour utiliser ce service efficacement.
Détection et lancement automatiques du service
Quarkus Dev Services automatise la détection et le lancement des services nécessaires tels que les bases de données, les courtiers de messages et autres services backend. Cette fonction exploite les dépendances de l'application spécifiées dans pom.xml ou build.gradle. Par exemple, l'ajout d'un pilote de base de données déclenche automatiquement le démarrage par Dev Services d'une instance conteneurisée correspondante de cette base de données si elle n'est pas déjà en cours d'exécution. La technologie utilisée ici implique principalement Testcontainers, qui permet la création d'instances légères et jetables de bases de données courantes, de navigateurs Web Selenium ou de tout autre élément pouvant s'exécuter dans un conteneur Docker.
Injection de configuration dynamique
Une fois les services requis instanciés, Quarkus Dev Services injecte dynamiquement les détails de connexion au service pertinents dans la configuration de l'application au moment de l'exécution. Cela se fait sans aucune intervention manuelle, à l'aide d'une fonctionnalité connue sous le nom de tests continus qui redirige la base de données standard ou d'autres URL de service vers les conteneurs de test automatiquement provisionnés. Les propriétés de configuration telles que les URL, les informations d'identification de l'utilisateur et d'autres paramètres opérationnels sont définies de manière transparente, permettant à l'application d'interagir avec ces services comme s'ils étaient configurés manuellement.
Comportements spécifiques au service
Dev Services est adapté à différents types de services :
Gestion du réseau et isolation des services
Chaque service créé par Quarkus Dev Services s'exécute dans son environnement isolé. Ceci est crucial pour garantir qu’il n’y a pas de conflits de ports, de résidus de données ou de problèmes de sécurité entre les différents tests de développement. Malgré cet isolement, les services sont mis en réseau de manière appropriée à l'aide de Docker, garantissant qu'ils peuvent communiquer entre eux selon les besoins, imitant une atmosphère de déploiement réelle.
Gestion du cycle de vie
Quarkus gère le cycle de vie complet de ces services fournis de manière dynamique. Lorsque vous démarrez votre application en mode développement, les services nécessaires sont automatiquement démarrés. Lorsque vous arrêtez l'application Quarkus, ces services sont également interrompus. Cette gestion inclut la gestion de la persistance des données selon les besoins, permettant aux développeurs de reprendre là où ils s'étaient arrêtés sans aucun retard de configuration.
Considérez que vous utilisez une base de données PostgreSQL avec Quarkus. Si aucune configuration PostgreSQL existante n'est détectée, Quarkus lancera un conteneur PostgreSQL Docker et connectera automatiquement votre application.
Ces services sont activés par défaut en modes développement et test mais peuvent être désactivés si nécessaire via l'application.properties :
quarkus.datasource.devservices.enabled=false
Développons le scénario dans lequel Quarkus utilise une base de données PostgreSQL et comment les services de développement facilitent cela avec un minimum de complications.
Si Quarkus détecte qu'aucune configuration PostgreSQL n'est active (non exécutée ou non configurée explicitement), il démarrera automatiquement un conteneur PostgreSQL à l'aide de Docker. Ceci est mis en place en coulisses via Dev Services.
Pour interagir avec la base de données via une couche ORM, pensez à utiliser Quarkus Panache, qui simplifie les opérations ORM d'Hibernate. Voici comment configurer votre environnement :
Ajouter des dépendances
Tout d'abord, incluez les dépendances nécessaires dans votre pom.xml :
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-orm-panache</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-jdbc-postgresql</artifactId> </dependency>
Définir l'entité
Ensuite, définissez votre entité, telle que 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(); } }
Créer le référentiel
Implémenter le référentiel qui interagira directement avec la base de données :
@ApplicationScoped public class CityRepository implements PanacheRepository<CityEntity> { }
Couche de service
Définissez la couche de service qui utilise le référentiel :
@ApplicationScoped public class CityServiceImpl implements CityService { @Inject CityRepository cityRepository; @Override public long countCities() { return cityRepository.count(); } } public interface CityService { long countCities(); }
Point de terminaison de la ressource
@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(); } }
Lorsque vous exécutez votre application Quarkus (mvn quarkus:dev), observez le démarrage automatique du conteneur PostgreSQL (Figure 2). Cette intégration transparente illustre la puissance de Quarkus Dev Services, simplifiant considérablement le développement et les tests en automatisant la configuration et la configuration de la connexion aux services externes nécessaires à votre application.
Figure 2 – Journaux d'application
Quarkus Dev Services rationalise les phases de développement et de test en gérant la configuration et la gestion de divers services, permettant ainsi aux développeurs de se concentrer davantage sur l'application elle-même. Quarkus prend en charge une large gamme de services de développement, notamment :
Quarkus Dev Services représente un changement de paradigme dans la façon dont les développeurs abordent la configuration et l'intégration de services externes pendant les phases de développement et de test. L'automatisation de la configuration de l'environnement accélère non seulement le processus de développement, mais réduit également le risque d'erreurs de configuration, permettant ainsi aux équipes de se concentrer plus facilement sur la création d'applications robustes et riches en fonctionnalités.
L'un des avantages les plus remarquables de Quarkus Dev Services est l'accent mis sur la productivité des développeurs. En supprimant la nécessité de gérer manuellement les dépendances des services, les développeurs peuvent immédiatement commencer à travailler sur la logique métier et les fonctionnalités des applications. Ce flux de travail rationalisé est particulièrement bénéfique dans les architectures de microservices où plusieurs services peuvent nécessiter un développement et une intégration simultanés
En conclusion, l'adoption de Quarkus Dev Services pourrait avoir un impact significatif sur l'efficacité de votre équipe de développement et les résultats du projet. La simplicité et la puissance de Quarkus encouragent l'expérimentation,
des itérations plus rapides et, finalement, un cycle de développement plus rapide. Ce type de levier technologique est ce dont les entreprises modernes ont besoin pour prospérer à l’ère numérique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!