簡體   English   中英

如何在 ebean 中使用多個數據庫

[英]How to use multiple databases with ebean

我正在嘗試使用 Ebean 框架 ORM 查詢不同的 postgres 數據庫。 按照這些這些文檔,對我的單個數據庫的查詢工作正常。 但要解決另一個問題,我必須通過 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

在這兩種情況下,我都像在 kotlin 中那樣配置了我的實體類:

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

在這兩種情況下,EbeanConfigProvider.java 的配置相同,如下所示

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 根據此文檔

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 開始,問題再次出現,但有不同的例外)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM