ebean如何使用多个数据库

How to use multiple databases with ebean

我正在尝试对不同的 postgres 数据库使用 Ebean 框架 ORM 查询。 按照 these and these 文档,对我的单个数据库的查询工作正常。但要解决另一个问题,我必须通过 DB.byName("name") 显式调用它。我怎样才能避免这种显式调用?

为了清楚起见,第一个示例 - 事实上,第二个 - 正如我希望的那样:

  1. QDbEmailQueue(DB.byName("superadmin")).findCount() 有效

  2. QDbEmailQueue().findCount() 抛出下一个异常:

Query threw SQLException:ERROR: relation "email_queue" does not exist
  Position: 22 Bind values:[] Query was:select count(*) from email_queue t0
javax.persistence.PersistenceException: Query threw SQLException:ERROR: relation "email_queue" does not exist
  Position: 22 Bind values:[] Query was:select count(*) from email_queue t0

在这两种情况下,我的实体-class 都像 kotlin 中那样配置:

@Entity
@DbName(value = "superadmin")
@Table(name = "email_queue")
class DbEmailQueue(
    @Id
    val emailQueueId: Int
    ...
): Model("superadmin")

在这两种情况下,EbeanConfigProvider.java 的配置与 here:

相同
public class EbeanConfigProvider implements ServerConfigProvider {

    public static final String SUPERADMIN = "superadmin";
    public static final String DB = "db";

    @Override
    public void apply(ServerConfig serverConfig) {

        DataSourceConfig dataSourceConfig = serverConfig.getDataSourceConfig();
        dataSourceConfig
                .setUsername(Config.INSTANCE.getAppDbUserName())
                .setPassword(Config.INSTANCE.getAppDbUserPswd());

        switch (serverConfig.getName()) {
            case DB: {
                serverConfig.setDefaultServer(true);
                dataSourceConfig.setUrl(Config.INSTANCE.getAppDbHostUrl() + Config.INSTANCE.getAppDbName());
                break;
            }
            case SUPERADMIN: {
                serverConfig.setDefaultServer(false);
                dataSourceConfig.setUrl(Config.INSTANCE.getAppDbHostUrl() + Config.INSTANCE.getSuperadminDbName());
                break;
            }
        }
    }
}

和application.yaml根据这个doc:

ebean:
  dbSchema: public  # use this schema rather than public
  migration:
    run: false       # run database migrations on startup
  search:
    packages: om.bo.mypackage.db
    querybean-packages: om.bo.mypackage.db.query

datasource:
  db:
    driver: org.postgresql.Driver
    default: true

  superadmin:
    driver: org.postgresql.Driver
    dbName: superadmin
    default: false

刚更新ebean版本。 我有 ebean 12.1.10。 在 12.1.11 问题仍然存在,但在版本 12.1.12 和 12.1.13 一切正常(从 12.2.1 开始问题再次出现,但有不同的异常)