0

0

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

王林

王林

发布时间:2024-09-03 14:42:08

|

882人浏览过

|

来源于dev.to

转载

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、mysqlmongodb 还是任何其他支持的数据库。开发服务确保相应的测试容器在开发过程中可用。
    • 消息系统:对于使用 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 中包含必要的依赖项:

    ECTouch移动商城系统
    ECTouch移动商城系统

    ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有

    下载
    
     io.quarkus
     quarkus-hibernate-orm-panache
    
    
     io.quarkus
     quarkus-jdbc-postgresql
    
    
  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 {
    }
    
  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 的简单性和强大功能鼓励实验,
更快的迭代,最终加快开发周期。这种技术杠杆是现代企业在数字时代蓬勃发展所需要的。

相关文章

夸克浏览器
夸克浏览器

夸克Quark是一款采用 chromium 单核设计,网页渲染加载速度快,还有 0.3s 闪电启动的极速体验。内置隐私防护功能,能多方面保护用户隐私,可识别各种恶意软件和钓鱼网站,确保上网安全。与夸克网盘一体设计,拥有夸克高考、夸克搜题等多种智能工具,还有超过上万条过滤规则的超强去广告功能,以及智能拼页的阅读模式等。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

668

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

248

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

516

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

256

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

387

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

533

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

605

2023.08.14

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 816人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号