You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Panache对接多个数据源,实现非默认数据源查询功能

Panache 对接多数据源实现方案

Panache 本身原生支持绑定多数据源,无需手动注入EntityManager编写原生查询,具体实现步骤如下:

1. 配置多数据源

首先在application.properties中声明所有需要对接的数据源,注意给非默认数据源指定唯一的持久化单元名称:

# 默认数据源配置
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=default_user
quarkus.datasource.password=default_pass
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/default_db

# 第二个数据源配置,指定持久化单元名称为user-db
quarkus.datasource."user-db".db-kind=postgresql
quarkus.datasource."user-db".username=user
quarkus.datasource."user-db".password=pass
quarkus.datasource."user-db".jdbc.url=jdbc:postgresql://localhost:5432/user_db
quarkus.hibernate-orm."user-db".packages=com.example.user.entity
quarkus.hibernate-orm."user-db".datasource=user-db

注意quarkus.hibernate-orm.<持久化单元名>.packages需要指定该数据源对应实体类所在的包路径,Quarkus会自动将对应包下的实体类绑定到指定数据源。

2. 实体类与数据源绑定

将对应数据源的实体类放到刚才配置的包路径下即可,Panache会自动识别绑定,无需额外注解:

  • 默认数据源对应的实体类可以放在公共包路径下,不需要额外配置
  • 非默认数据源对应的实体类放到对应持久化单元配置的packages指定路径下即可,比如上面示例中com.example.user.entity包下的User实体,会自动绑定到user-db数据源

3. 直接使用Panache API操作非默认数据源

绑定完成后,不管是Panache实体模式还是Panache仓库模式,都可以直接调用原有API操作对应数据源,和操作默认数据源完全一致:

// 属于user-db数据源的实体类
@Entity
public class User extends PanacheEntity {
    public String username;
    public String email;
    public Boolean active;
}

// 直接调用Panache API查询,不需要手动处理EntityManager
List<User> activeUsers = User.list("active", true);

注意事项

  • 不同数据源对应的实体类不要放在同一个包下,避免Quarkus绑定混乱
  • 如果使用Panache仓库模式,仓库类关联的实体类属于哪个数据源,仓库就会自动绑定对应的数据源,不需要额外配置
  • 多数据源场景下如果需要事务控制,直接使用@Transactional注解即可,Quarkus会自动处理对应数据源的事务

内容的提问来源于stack exchange,提问作者Leonardo Freua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:24:02