首页 > 图灵资讯 > 技术篇>正文

利用自动设置和与 Quarkus 开发服务的集成来实现高效开发

2024-09-04 19:51:04

jprime 2024 圆满结束!!!

jprime 2024 组织者再次尽最大努力提供多样化的主题,以确保每个人都能有所收获。

然而,今天的文章不是原因 michael simons 的演讲“spring 和 quarkus 尽管它很有洞察力,但它是由集成测试的演变引起的。他探索了集成测试策略,重点关注 spring boot 中的设置。

作者明确强调,他强调的问题是 quarkus 通过使用开发服务得到有效解决(图) 1)。这凸显了我对某些应用程序的怀疑态度。 spring boot 另外一个原因 - 它的复杂性和 quarkus 特别是在使用开发服务时,简化解决方案形成了鲜明的对比。

利用自动设置和与 Quarkus 开发服务的集成来实现高效开发

图 1 – jprime 2024

在新参与者中见证开发服务的惊喜是非常棒的。然而,值得注意的是,dev services 并不是 quarkus 最新功能。很长一段时间以来,它一直是框架的一部分。让我们进一步研究 quarkus 开发服务,探索其持久优势。

quarkus 开发服务

在 quarkus 在开发和测试模式下,开发服务有助于自动配置未配置的服务。本质上,如果您在未配置的情况下包含扩展,quarkus 相关服务将自动启动(通常在后台使用) testcontainers)并配置您的应用程序,以有效地使用此服务。

  1. 检测和启动自动服务 quarkus dev services 必要的服务,如数据库、消息代理等后端服务,可以自动检测和启动。此函数利用 pom.xml 或 build.gradle 依赖项目中指定的应用程序。例如,添加数据库驱动程序将自动触发开发服务,启动数据库的相应容器化实例(如果实例尚未运行)。这里使用的技术主要涉及 testcontainers,它允许创建通用数据库,selenium web 浏览器或任何其他可能 docker 轻量级一次性实例在容器中运行。

  2. 注入动态配置 一旦实例化所需的服务,quarkus dev services 将相关服务连接的详细信息动态注入到应用程序的配置中。这是在没有任何手动干预的情况下完成的。标准数据库或其他服务被称为连续测试功能 url 重新路由到自动配置的测试容器。 url、用户凭证等操作参数的配置属性是无缝设置的,允许应用程序像手动配置一样与这些服务互动。

  3. 为特定行为服务 为各类服务量身定制开发服务:

    • 数据库: 根据您的应用程序需求,自动提供正在运行的数据库,无论是 postgresql、mysql、mongodb 或者任何其他支持的数据库。开发服务确保相应的测试容器在开发过程中可用。
    • 新闻系统:用于使用 kafka 或 amqp 等待消息系统的应用,quarkus dev services 使用 docker 启动必要的代理并连接到应用程序。
    • 自定义开发服务:开发人员可以创建和使用开发服务框架的自定义 quarkus 扩展扩展功能。这允许定制特定项目,提供更大的灵活性和控制。
  4. 网络处理与服务隔离 quarkus dev services 启动的每项服务都在其隔离环境中运行。这对于确保不同开发测试之间没有端口冲突、数据残留或安全问题至关重要。尽管存在这种隔离,但该服务仍在使用 docker 适当的互联网,确保它们能够根据需要相互交流,模仿现实世界的部署氛围。

  5. 生命周期管理 quarkus 管理这些动态配置服务的完整生命周期。当您在开发模式下启动应用程序时,必要的服务将自动启动。当您停止时 quarkus 这些服务也将在应用程序中终止。该管理包括根据需要处理数据的持久性,以便开发人员在没有任何设置延迟的情况下继续从中断的地方操作。

用法示例

假设您正在 quarkus 中使用 postgresql 如果没有检测到现有的数据库。 postgresql 配置,quarkus 将启动 postgresql docker 并自动连接您的应用程序。

在开发和测试模式下默认使用这些服务,但必要时可以通过 application.properties 禁用:

quarkus.datasource.devservices.enabled=false

让我们扩展一下 quarkus 使用 postgresql 以及如何以最小的麻烦促进数据库场景和开发服务。

如果 quarkus 检测到没有 postgresql 配置处于活动状态(未运行或未显式配置),将自动使用 docker 启动 postgresql 容器。这是通过开发服务设置在幕后的。

要通过 orm 请考虑使用层与数据库的交互 quarkus panache,它简化了 hibernate orm 操作。设置环境的方法如下:

  1. 添加依赖项

    首先,在 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. 定义实体

    接下来,定义你的实体,比如 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. 创建存储库

    实现与数据库直接交互的存储库:

    @applicationscoped
    public class cityrepository implements 
    panacherepository<cityentity> {
    }
    

  4. 服务层

    定义使用存储库的服务层:

    @applicationscoped
    public class cityserviceimpl implements cityservice {
    
      @inject
      cityrepository cityrepository;
    
      @override
      public long countcities() {
       return cityrepository.count();
      }
    }
    
    public interface cityservice {
     long countcities();
    }
    

  5. 资源端点

    @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();
      }
     }
    

当您运行 quarkus 应用程序 (mvn quarkus:dev) 时,观察 postgresql 自动启动容器(图) 2)。这种无缝集成反映了 quarkus 开发服务的强大功能,通过自动配置和连接到应用程序所需的外部服务,使开发和测试更加简单。

利用自动设置和与 Quarkus 开发服务的集成来实现高效开发

图 2 – 应用程序日志

平台开发服务

quarkus dev services 为了简化开发和测试阶段,处理各种服务的配置和管理,使开发人员更加关注实际应用。 quarkus 包括:

  • amqp
  • apicurio 注册表
  • 数据库
  • 卡夫卡
  • 钥匙斗篷
  • kubernetes
  • mongodb
  • rabbitmq
  • 脉冲星
  • redis
  • 金库
  • 无限跨度
  • elasticsearch
  • 可观测性
  • neo4j
  • wiremock
  • 麦克克斯
  • 钥匙斗篷
  • 还有更多,每一个都旨在无缝增强你的开发环境
结论

quarkus 开发服务代表了开发人员在开发和测试阶段如何设置和整合外部服务的范式变化。环境设置的自动化不仅加速了开发过程,而且降低了配置错误的可能性,使团队更容易专注于创建强大和丰富的应用程序。

quarkus 开发服务的突出优势之一是强调开发人员的生产力。开发人员可以立即开始处理业务逻辑和应用程序功能,以消除手动管理服务依赖项目的需求。这种简化的工作流程对微服务架构特别有益,其中许多服务可能需要同时开发和集成

总之,采用 quarkus 开发服务能显著影响您的开发团队的效率和项目成果。 quarkus 鼓励实验的简单性和强大功能, 迭代更快,开发周期最终加快。现代企业在数字时代蓬勃发展所需要的这种技术杠杆。

以上是利用自动设置和和和与 Quarkus 为了实现高效开发的详细内容,请关注图灵教育的其他相关文章!

上一篇 确保 Java 函数在并发执行时的正确性
下一篇 返回列表

文章素材均来源于网络,如有侵权,请联系管理员删除。