Maison Java javaDidacticiel Exploiter la configuration et l'intégration automatiques avec les services de développement Quarkus pour un développement efficace

Exploiter la configuration et l'intégration automatiques avec les services de développement Quarkus pour un développement efficace

Sep 03, 2024 pm 01:11 PM

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.

Harnessing Automatic Setup and Integration with Quarkus Dev Services for Efficient Development

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.

Services de développement Quarkus

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.

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

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

  3. Comportements spécifiques au service

    Dev Services est adapté à différents types de services :

    • Bases de données : Fournit automatiquement une base de données en cours d'exécution adaptée aux besoins de votre application, qu'il s'agisse de PostgreSQL, MySQL, MongoDB ou de toute autre base de données prise en charge. Dev Services garantit qu'un Testcontainer correspondant est disponible pendant le développement.
    • Systèmes de messagerie : Pour les applications qui utilisent des systèmes de messagerie comme Kafka ou AMQP, Quarkus Dev Services démarre les courtiers nécessaires à l'aide de Docker et les connecte à l'application.
    • Services de développement personnalisés : Les développeurs peuvent étendre les fonctionnalités en créant des extensions Quarkus personnalisées qui exploitent le framework Dev Services. Cela permet des configurations sur mesure spécifiques au projet, offrant encore plus de flexibilité et de contrôle.
  4. 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.

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

Exemple d'utilisation

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 :

  1. 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>
    
  2. 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();
    }
    }
    
  3. 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> {
    }
    
  4. 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();
    }
    
  5. 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.

Harnessing Automatic Setup and Integration with Quarkus Dev Services for Efficient Development

Figure 2 – Journaux d'application

Services de développement de plateforme

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 :

  • AMQP
  • Registre Apicurio
  • Bases de données
  • Kafka
  • Porte-clés
  • Kubernetes
  • MongoDB
  • LapinMQ
  • Pulsar
  • Redis
  • Coffre
  • Infinispan
  • Elasticsearch
  • Observabilité
  • Neo4j
  • WireMock
  • Microcks
  • Porte-clés
  • et bien d'autres, chacun conçu pour améliorer votre environnement de développement de manière transparente

Conclusion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Qu'est-ce qu'une impasse en Java et comment pouvez-vous l'empêcher? Qu'est-ce qu'une impasse en Java et comment pouvez-vous l'empêcher? Aug 23, 2025 pm 12:55 PM

ADEADLOCKINJAVAOCCURSWHENTWOORMORORETHREADSAREBLOCKEDEDFOREVERS, chaque avance pour la fourniture de laBerce-Organisation de la manière générale;

Posture correcte pour le traitement de la demande non UTF-8 Encodage dans l'application Spring Boot Posture correcte pour le traitement de la demande non UTF-8 Encodage dans l'application Spring Boot Aug 15, 2025 pm 12:30 PM

Cet article traite du mécanisme et des malentendus communs des applications de démarrage de printemps pour gérer l'encodage des demandes non UTF-8. Le noyau réside dans la compréhension de l'importance du paramètre de charme dans l'en-tête de type contenu HTTP, ainsi que le flux de traitement de caractères par défaut du flux Spring Boot. En analysant le code brouillé causé par de mauvaises méthodes de test, l'article guide les lecteurs comment simuler correctement et tester les demandes de différents encodages et explique que Spring Boot ne nécessite généralement pas de configurations complexes pour atteindre la compatibilité sous la prémisse que le client déclare correctement l'encodage.

Comment utiliser facultatif en Java? Comment utiliser facultatif en Java? Aug 22, 2025 am 10:27 AM

UseOptional.Empty (), facultatif.of (), andoptional.ofnullable () toCreateOptionalistances adepsendingonwherethevaluesabsent, non null, orpossibly null.2.Checkforvalussafelyusingispresent () orpreférall

Exploration des modèles de conception Java communs avec des exemples Exploration des modèles de conception Java communs avec des exemples Aug 17, 2025 am 11:54 AM

Le modèle de conception Java est une solution réutilisable aux problèmes de conception logicielle courants. 1. Le mode Singleton garantit qu'il n'y a qu'une seule instance d'une classe, qui convient à la mise en commun de la connexion de la base de données ou à la gestion de la configuration; 2. Le mode d'usine découple la création d'objets, et des objets tels que les méthodes de paiement sont générés par le biais de classes d'usine; 3. Le mode observateur informe automatiquement des objets dépendants, adaptés aux systèmes axés sur les événements tels que les mises à jour météorologiques; 4. L'algorithme de commutation dynamique du mode de stratégie tel que les stratégies de tri améliore la flexibilité du code. Ces modèles améliorent la maintenabilité et l'évolutivité du code, mais devraient éviter une surutilisation.

Comment envoyer et recevoir des messages sur un WebSocket en Java Comment envoyer et recevoir des messages sur un WebSocket en Java Aug 16, 2025 am 10:36 AM

Créez un point de terminaison WebSocket Server pour définir le chemin à l'aide de @ServeRendPoint et gérer les connexions, la réception de messages, la fermeture et les erreurs via @onOpen, @onMessage, @OnClose et @onerror; 2. Assurez-vous que les dépendances Javax.websocket-API sont introduites pendant le déploiement et enregistrées automatiquement par le conteneur; 3. Le client Java obtient WebSocketContainer via le ContainerProvider, appelle ConnectToServer pour se connecter au serveur et reçoit des messages à l'aide de la classe d'annotation @clientendpoint; 4. Utilisez la session GetBasicre

Comment déployer une application Java Comment déployer une application Java Aug 17, 2025 am 12:56 AM

Préparez-vous en application par rapport à Mavenorgradletobuildajarorwarfile, externalisationConfiguration.2.ChoOSEADPLOYENDIRONMENT: Runonbaremetal / vmwithjava-jarandsystemd, deploywarontomcat, compeneriserisewithdocker, orusecloudplatformslikelise.

Java Cryptography Architecture (JCA) pour le codage sécurisé Java Cryptography Architecture (JCA) pour le codage sécurisé Aug 23, 2025 pm 01:20 PM

Comprendre les composants de base JCA tels que MessagediGest, Cipher, KeyGenerator, SecureRandom, Signature, Keystore, etc., qui mettent en œuvre des algorithmes via le mécanisme du fournisseur; 2. Utilisez des algorithmes et des paramètres forts tels que SHA-256 / SHA-512, AES (clé 256 bits, mode GCM), RSA (2048 bits ou supérieur) et SecureRandom; 3. Évitez les clés à code dur, utilisez des clés pour gérer les clés et générez des clés via des mots de passe dérivés en toute sécurité tels que PBKDF2; 4. Désactiver le mode ECB, adopter des modes de chiffrement d'authentification tels que GCM, utiliser des IV aléatoires uniques pour chaque cryptage et des caissiers clairs dans le temps

Résolution des problèmes communs de Java NullpointerException avec facultatif Résolution des problèmes communs de Java NullpointerException avec facultatif Aug 31, 2025 am 07:11 AM

Facultatif est une classe de conteneurs introduite par Java 8. Il est utilisé pour indiquer clairement qu'une valeur peut être vide, évitant ainsi NullPointerException; 2. Il simplifie la vérification null nul en fournissant MAP, Orelse et d'autres méthodes, empêchant les méthodes de renvoyer les valeurs de rendement de la collection NULL et de normaliser; 3. Les meilleures pratiques incluent uniquement les valeurs de retour, d'éviter l'utilisation de champs ou de paramètres, de distinguer Orelse de Orelseget, et de ne pas appeler Get () directement; 4. Facultatif ne doit pas être abusé. Si les méthodes non vides n'ont pas besoin d'être enveloppées, les opérations facultatives inutiles doivent être évitées dans le flux; L'utilisation correcte de facultatif peut considérablement améliorer la sécurité et la lisibilité du code, mais elle nécessite de bonnes habitudes de programmation.

See all articles