JPrime 2024 concluído com sucesso!!
Os organizadores do JPrime 2024 mais uma vez não mediram esforços para oferecer uma gama diversificada de tópicos, garantindo que haja algo para todos.
No entanto, o artigo de hoje não é desencadeado por uma das palestras de Michael Simons sobre "A evolução dos testes de integração no Spring e no Quarkus", embora tenha sido altamente esclarecedor. Ele explorou estratégias de testes de integração, com foco na configuração no Spring Boot.
O autor enfatizou claramente que os problemas que ele destacou são efetivamente resolvidos no Quarkus por meio da utilização de Dev Services (Figura 1). Isso destaca outra razão pela qual vejo o Spring Boot com ceticismo em relação a certas aplicações - suas complexidades são fortemente contrastadas pelas soluções simplificadas do Quarkus, particularmente com o uso de Dev Services.
Figura 1 – JPrime 2024
Foi notável testemunhar o espanto que o Dev Services provocou entre os novos participantes. No entanto, é importante observar que Dev Services não é um recurso recente no Quarkus; já faz algum tempo que faz parte integrante do quadro. Vamos nos aprofundar nos Quarkus Dev Services e explorar seus benefícios duradouros.
No Quarkus, os Dev Services facilitam o provisionamento automático de serviços não configurados nos modos de desenvolvimento e teste. Essencialmente, se você incluir uma extensão sem configurá-la, o Quarkus iniciará automaticamente o serviço relevante – geralmente utilizando Testcontainers em segundo plano – e configurará seu aplicativo para usar esse serviço de forma eficiente.
Detecção e lançamento automático de serviço
Quarkus Dev Services automatiza a detecção e lançamento de serviços necessários, como bancos de dados, corretores de mensagens e outros serviços de back-end. Esta função utiliza as dependências do aplicativo especificadas em pom.xml ou build.gradle. Por exemplo, adicionar um driver de banco de dados aciona automaticamente o Dev Services para ativar uma instância em contêiner correspondente desse banco de dados, caso ele ainda não esteja em execução. A tecnologia usada aqui envolve principalmente Testcontainers, que permite a criação de instâncias leves e descartáveis de bancos de dados comuns, navegadores Selenium ou qualquer outra coisa que possa ser executada em um contêiner Docker.
Injeção de configuração dinâmica
Depois que os serviços necessários são instanciados, o Quarkus Dev Services injeta dinamicamente os detalhes relevantes da conexão do serviço na configuração do aplicativo em tempo de execução. Isso é feito sem qualquer intervenção manual, usando um recurso conhecido como Teste Contínuo que redireciona o banco de dados padrão, ou outras URLs de serviço, para os Testcontainers provisionados automaticamente. Propriedades de configuração como URLs, credenciais de usuário e outros parâmetros operacionais são definidas perfeitamente, permitindo que o aplicativo interaja com esses serviços como se eles tivessem sido configurados manualmente.
Comportamentos específicos do serviço
O Dev Services é adaptado para vários tipos de serviços:
Manipulação de rede e isolamento de serviço
Cada serviço desenvolvido pela Quarkus Dev Services é executado em seu ambiente isolado. Isto é crucial para garantir que não haja conflitos portuários, resíduos de dados ou problemas de segurança entre os diferentes testes de desenvolvimento. Apesar desse isolamento, os serviços são conectados em rede de maneira adequada usando Docker, garantindo que eles possam se comunicar entre si conforme necessário, imitando uma atmosfera de implantação do mundo real.
Gerenciamento do ciclo de vida
A Quarkus gerencia o ciclo de vida completo desses serviços provisionados dinamicamente. Ao iniciar seu aplicativo no modo de desenvolvimento, os serviços necessários são iniciados automaticamente. Quando você interrompe o aplicativo Quarkus, esses serviços também são encerrados. Esse gerenciamento inclui o tratamento da persistência dos dados conforme necessário, permitindo que os desenvolvedores continuem de onde pararam, sem atrasos na configuração.
Considere que você está usando um banco de dados PostgreSQL com Quarkus. Se nenhuma configuração PostgreSQL existente for detectada, o Quarkus iniciará um contêiner PostgreSQL Docker e conectará seu aplicativo automaticamente.
Esses serviços são habilitados por padrão nos modos de desenvolvimento e teste, mas podem ser desabilitados se necessário por meio do application.properties:
quarkus.datasource.devservices.enabled=false
Vamos expandir o cenário em que o Quarkus está usando um banco de dados PostgreSQL e como os Dev Services facilitam isso com o mínimo de barulho.
Se o Quarkus detectar que nenhuma configuração do PostgreSQL está ativa (não em execução ou não configurada explicitamente), ele iniciará automaticamente um contêiner PostgreSQL usando Docker. Isso é configurado nos bastidores por meio de Dev Services.
Para interagir com o banco de dados por meio de uma camada ORM, considere usar o Quarkus Panache, que simplifica as operações do Hibernate ORM. Veja como configurar seu ambiente:
Adicionar dependências
Em primeiro lugar, inclua as dependências necessárias em seu pom.xml:
io.quarkus quarkus-hibernate-orm-panache io.quarkus quarkus-jdbc-postgresql
Definir a entidade
Em seguida, defina sua entidade, 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(); } }
Criar o repositório
Implemente o repositório que irá interagir diretamente com o banco de dados:
@ApplicationScoped public class CityRepository implements PanacheRepository{ }
Camada de serviço
Defina a camada de serviço que utiliza o repositório:
@ApplicationScoped public class CityServiceImpl implements CityService { @Inject CityRepository cityRepository; @Override public long countCities() { return cityRepository.count(); } } public interface CityService { long countCities(); }
Ponto final do recurso
@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(); } }
Ao executar sua aplicação Quarkus (mvn quarkus:dev), observe a inicialização automática do contêiner PostgreSQL (Figura 2). Essa integração perfeita exemplifica o poder do Quarkus Dev Services, tornando o desenvolvimento e os testes significativamente mais simples, automatizando a configuração e a configuração da conexão com serviços externos necessários para sua aplicação.
Figura 2 – Logs do aplicativo
O Quarkus Dev Services agiliza as fases de desenvolvimento e teste, lidando com a configuração e o gerenciamento de vários serviços, permitindo que os desenvolvedores se concentrem mais no aplicativo real. Quarkus oferece suporte a uma ampla gama de serviços de desenvolvimento, incluindo:
Quarkus Dev Services representa uma mudança de paradigma na forma como os desenvolvedores abordam a configuração e integração de serviços externos durante as fases de desenvolvimento e teste. A automação da configuração do ambiente não apenas acelera o processo de desenvolvimento, mas também reduz o potencial de erros de configuração, tornando mais fácil para as equipes se concentrarem na criação de aplicativos robustos e ricos em recursos.
Uma das principais vantagens do Quarkus Dev Services é a ênfase na produtividade do desenvolvedor. Ao eliminar a necessidade de gerenciar manualmente as dependências de serviço, os desenvolvedores podem começar imediatamente a trabalhar na lógica de negócios e nos recursos do aplicativo. Este fluxo de trabalho simplificado é particularmente benéfico em arquiteturas de microsserviços onde vários serviços podem exigir desenvolvimento e integração simultâneos
Concluindo, adotar o Quarkus Dev Services pode impactar significativamente a eficácia da sua equipe de desenvolvimento e os resultados do projeto. A simplicidade e o poder do Quarkus incentivam a experimentação,
iterações mais rápidas e, em última análise, um ciclo de desenvolvimento mais rápido. Esse tipo de alavancagem tecnológica é o que as empresas modernas precisam para prosperar na era digital.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3