活动介绍

Quarkus数据库开发与微服务客户端使用全解析

发布时间: 2025-08-11 17:06:01 阅读量: 2 订阅数: 4
PDF

Quarkus快速入门与实战指南

### Quarkus数据库开发与微服务客户端使用全解析 #### 1. 简化数据库开发 在数据库开发中,有多种方法可以选择,这里主要介绍数据仓库方法。数据仓库方法使用 `AccountRepository` 作为数据访问方法的中介,它与 JPA 的 `EntityManager` 有相似之处,但也存在关键差异。在过去十多年里,Spring 框架推广了数据仓库方法,Martin Fowler 也在相关架构模式中概述了这种方法。 要实现数据仓库方法,需要添加以下依赖: ```xml <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-orm-panache</artifactId> </dependency> ``` 这个依赖与主动记录方法所需的依赖相同,这使得在两种方法之间切换很方便,甚至可以在同一个应用程序的不同场景中分别使用这两种方法。 以下是数据仓库方法中 `Account` 实体的代码: ```java @Entity public class Account { @Id @GeneratedValue private Long id; private Long accountNumber; private Long customerNumber; private String customerName; private BigDecimal balance; private AccountStatus accountStatus = AccountStatus.OPEN; ... } ``` 需要注意的是,为了简洁起见,上述代码中省略了 getter 和 setter 方法、通用对象方法以及 `equals` 和 `hashcode` 方法。这个代码与 JPA 的代码很相似,主要区别在于没有 `@NamedQuery` 注解,并且主键的默认 ID 生成过程不同。 接下来是仓库类的代码: ```java @ApplicationScoped public class AccountRepository implements PanacheRepository<Account> { public Account findByAccountNumber(Long accountNumber) { return find("accountNumber = ?1", accountNumber).firstResult(); } } ``` 与主动记录方法一样,父类包含了查找和检索实例的便捷方法。 下面是 JAX - RS 资源的代码: ```java public class AccountResource { @Inject AccountRepository accountRepository; @GET public List<Account> allAccounts() { return accountRepository.listAll(); } @GET @Path("/{acctNumber}") public Account getAccount(@PathParam("acctNumber") Long accountNumber) { Account account = accountRepository.findByAccountNumber(accountNumber); return account; } @POST @Transactional public Response createAccount(Account account) { accountRepository.persist(account); return Response.status(201).entity(account).build(); } @PUT @Path("{accountNumber}/withdrawal") @Transactional public Account withdrawal(@PathParam("accountNumber") Long accountNumber, String amount) { Account entity = accountRepository.findByAccountNumber(accountNumber); entity.withdrawFunds(new BigDecimal(amount)); return entity; } } ``` `AccountResourceTest` 类可以从 JPA 示例中复制,因为两种方法使用的实体都有 getter 和 setter 方法。可以在 `/chapter4/data - repository/` 目录下使用以下命令运行测试: ```bash mvn clean install ``` 不同数据库访问方法有不同的特点,以下是 JPA、主动记录和数据仓库三种方法的对比: | 方法 | 优点 | 缺点 | | ---- | ---- | ---- | | JPA | 便于现有 Java EE 和 Jakarta EE 应用程序迁移;可以使用 `@NamedQuery` 定义自定义查询 | 需要手动创建主键字段;查询需要实际的 SQL;非主键搜索需要 SQL 或 `@NamedQuery` | | 主动记录 | 不需要为所有字段提供 getter 和 setter 方法;使用数据库进行测试比过去更容易 | 数据访问层与对象耦合,不使用数据库进行测试困难;违反单一职责原则和关注点分离原则 | | 数据仓库 | 清晰分离数据访问和业务逻辑,便于独立测试 | 需要手动创建主键字段;没有自定义方法时,类为空,可能看起来不寻常 | #### 2. 部署到 Kubernetes 当 `Account` 服务有了数据库后,就可以将其部署到 Kubernetes 中。在此之前,需要先部署一个 PostgreSQL 实例供其使用。 ##### 2.1 部署 PostgreSQL 部署 PostgreSQL 到 Kubernetes 需要完成以下步骤: 1. 创建一个包含编码后的用户名和密码的 Kubernetes Secret,这个 Secret 将用于创建 PostgreSQL 数据库和 Quarkus 中的数据源配置。 2. 部署 PostgreSQL 数据库。 具体操作如下: 首先,确保 Minikube 已经启动,如果没有启动,可以使用以下命令启动: ```bash minikube start ``` 在每个将部署到 Minikube 的终端窗口中,需要运行以下命令,因为 Minikube 使用其内部的 Docker 来构建镜像: ```bash eval $(minikube -p minikube docker - env) ``` Minikube 启动后,创建 Secret: ```bash kubectl create secret generic db - credentials \ --from - literal = username = quarkus_banking \ --from - literal = password = quarkus_banking ``` 如果使用的 Minikube 实例与之前的章节相同,需要先执行以下命令删除之前的 Secret: ```bash kubectl delete secret generic db - credentials ``` 创建好 Secret 后,启动 PostgreSQL 数据库实例,这需要一个 Kubernetes Deployment 和 Service。切换到 `/chapter4/` 目录并运行以下命令: ```bash kubectl apply - f postgresql_kubernetes.yml ``` 如果成功,终端会显示 Deployment 和 Service 已创建的消息。 ##### 2.2 打包和部署 这里以主动记录示例为例进行部署。在打包应用程序之前,需要进行一些更改,因为应用程序将从 Kubernetes Secrets 中读取数据库配置。在 `pom.xml` 中添加以下依赖: ```xml <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-kubernetes-config</artifactId> </dependency> ``` 这个依赖使应用程序能够读取 Kubernetes ConfigMaps 和 Secrets。为了让应用程序知道从哪里读取信息,还需要在 `application.properties` 中添加以下额外属性: ```properties %prod.quarkus.kubernetes-config.enabled = true %prod.quarkus.kubernetes-config.secrets.enabled = true %prod.quarkus.kubernetes-config.secrets = db - credentials ``` `%prod.` 前缀确保这些设置在开发和测试期间不被使用。 同时,还需要修改 `application.properties` 中的数据源信息以适应 Kubernetes: ```properties %prod.quarkus.datasource.username = ${username} %prod.quarkus.datasource.password = ${password} %prod.quarkus.datasource.jdbc.url = jdbc:postgresql://postgres.default:5432/ quarkus_banking ``` 完成这些更改后,就可以构建镜像并将其部署到 Kubernetes 中: ```bash mvn clean package - Dquarkus.kubernetes.deploy = true ``` 部署 `Account` 服务后,可以使用以下命令查看所有服务的详细信息: ```bash minikube service list ``` 输出结果如下: | NAMESPACE | NAME | TARGET PORT |
corwn 最低0.47元/天 解锁专栏
赠100次下载
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

郝ren

资深技术专家
互联网老兵,摸爬滚打超10年工作经验,服务器应用方面的资深技术专家,曾就职于大型互联网公司担任服务器应用开发工程师。负责设计和开发高性能、高可靠性的服务器应用程序,在系统架构设计、分布式存储、负载均衡等方面颇有心得。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

Coze字幕编码与导出:确保兼容性与高质量输出的3个技巧

![Coze工作流拆解教学(特效字幕的一键生成视频)](https://ganknow.com/blog/wp-content//uploads/2023/07/Supported-Video-Formats-on-YouTube-1024x597.webp) # 1. Coze字幕编码的背景与重要性 在数字化内容日益增长的今天,字幕编码已经成为视频内容不可或缺的一部分。随着互联网的普及和多语言需求的上升,如何将字幕文件与视频内容无缝结合,保证其在各种平台和设备上的兼容性,变得尤为重要。 Coze作为一种新兴的字幕编码技术,因其独特的功能和优越的性能,正逐渐成为行业的新标准。它不仅支持多种

ReAct模型创新应用:AI交互设计的未来趋势

![AI智能体策略FunctionCalling和ReAct有什么区别?](https://arxiv.org/html/2404.03648v1/x5.png) # 1. ReAct模型简介 ## 简介 ReAct模型是一个创新的交互设计模型,它旨在通过动态反馈和适应机制来改善用户体验。ReAct是"反应式"和"交互式"的合成词,意味着该模型能够实时响应用户行为,并据此调整交互流程。与传统模型相比,ReAct模型提供了一个更为灵活和智能的框架,用以创建更加个性化且有效的用户体验。 ## ReAct模型的核心组成 ReAct模型的核心在于其响应机制和适应策略,它包括用户行为的实时监控、即时

【AgentCore的自动化测试】:自动化测试策略保证AgentCore质量

![【AgentCore的自动化测试】:自动化测试策略保证AgentCore质量](https://anhtester.com/uploads/post/integration-testing-blog-anh_tester.jpg) # 1. AgentCore自动化测试概述 ## 1.1 自动化测试简介 自动化测试是使用软件工具来编写和执行测试用例,与手动执行测试相比,它能够提高测试效率、覆盖率,并减少测试周期时间。随着软件工程的不断发展,自动化测试已经成为现代IT行业中不可或缺的一环,特别是在持续集成和持续部署(CI/CD)流程中。 ## 1.2 自动化测试的优势 自动化测试的优势主

【Coze工作流字幕与标题】:让文字在视频中焕发活力的技巧

![工作流](https://dl-preview.csdnimg.cn/88926619/0005-8a4a383642fa8794f3924031c0f15530_preview-wide.png) # 1. 工作流字幕与标题的重要性 在当今的多媒体环境中,字幕与标题已成为视频内容创作和消费不可或缺的一部分。它们不仅起到了引导观众理解视频内容的作用,同时在提高可访问性、搜索优化和品牌识别方面发挥着至关重要的作用。正确的字幕与标题可以强化信息传达,错误或缺失则可能导致观众流失,影响作品的整体效果。因此,在工作流中重视和优化字幕与标题的制作是每个内容创作者必须面对的课题。 ## 1.1 字

【AI Agent最佳实践】:深度案例分析,揭秘行业领先经验(智慧企业必备)

![【AI Agent最佳实践】:深度案例分析,揭秘行业领先经验(智慧企业必备)](https://www.haptik.ai/hs-fs/hubfs/AI-Chatbot-Customer-Self-Service-24-08.webp?width=960&height=502&name=AI-Chatbot-Customer-Self-Service-24-08.webp) # 1. AI Agent技术概述 ## 1.1 AI Agent的定义与功能 AI Agent(人工智能代理)是指能够自主执行任务并进行决策的智能软件程序或系统。它通常集成机器学习、自然语言处理等AI技术,通过感知

Coze视频穿越生成工具深度评测:掌握秘诀,创造无限可能

![Coze视频穿越生成工具深度评测:掌握秘诀,创造无限可能](https://opis-cdn.tinkoffjournal.ru/mercury/ai-video-tools-fb.gxhszva9gunr..png) # 1. Coze视频穿越生成工具概述 ## 1.1 Coze工具简介 在当今多媒体技术飞速发展的时代,视频内容已成为传达信息、表达创意的重要媒介。Coze视频穿越生成工具应运而生,它是一款集成了先进视频处理技术的软件,旨在帮助用户轻松创建富有创意的视频穿越效果。视频穿越技术通过模拟穿越时空的场景,赋予视频内容以震撼视觉体验,其应用范围广泛,从电影特效、游戏动画到个人视

【AR与VR中的AI数据可视化】:沉浸式分析体验新纪元

![【AR与VR中的AI数据可视化】:沉浸式分析体验新纪元](https://www.visual-computing.org/wp-content/uploads/image001-1024x475.png) # 1. AR与VR技术概述 ## 1.1 AR与VR技术的起源与演进 增强现实(AR)和虚拟现实(VR)技术近年来迅速发展,它们起初被用于娱乐和游戏领域,但其应用范围已远远超出了这一点。AR技术通过在现实世界的视图中叠加数字信息来增强用户的感知,而VR技术则通过完全的虚拟环境为用户提供沉浸式体验。它们的起源可以追溯到20世纪90年代,随着计算能力的提升和图形处理技术的创新,AR和

Spring Cloud Alibaba Nacos配置中心:替代Config的下一代配置管理策略

![Spring Cloud Alibaba Nacos配置中心:替代Config的下一代配置管理策略](http://fescar.io/en-us/assets/images/spring-cloud-alibaba-img-ca9c0e5c600bfe0c3887ead08849a03c.png) # 1. Spring Cloud Alibaba Nacos配置中心简介 Spring Cloud Alibaba Nacos作为阿里巴巴开源的一款轻量级服务发现和配置管理组件,旨在简化微服务架构的配置管理,减少开发和运维的复杂性。Nacos为微服务提供统一的配置管理服务,支持配置的版本控

Coze工作流监控与报警:构建实时监控系统确保流程稳定

![Coze工作流监控与报警:构建实时监控系统确保流程稳定](https://images.ctfassets.net/w1bd7cq683kz/2NrQlwHVJ0zvk8dwuuQvgh/6c9c6678c75c26ee8a2e2151563dae00/Prom_componenets_and_architecture.png) # 1. 工作流监控与报警概述 工作流监控与报警作为确保企业业务流程稳定运行的重要组成部分,一直以来都是IT行业中的焦点话题。它涉及实时监控企业内部的工作流系统,及时发现并处理可能影响工作效率和系统稳定性的异常问题。有效的监控不仅要求对系统运行状态有一个全面的认
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )