Java 如何在ebean中使用多个数据库

Java 如何在ebean中使用多个数据库,java,database,postgresql,kotlin,ebean,Java,Database,Postgresql,Kotlin,Ebean,我正在尝试使用Ebean框架ORM查询不同的postgres数据库。 根据文档和文档,对我的单个数据库的查询工作正常。但是为了解决另一个问题,我必须通过DB.byName(“name”)显式地调用它。我怎样才能避免这个明确的呼叫 明确地说,第一个例子——事实上,第二个——我希望它是: QDbEmailQueue(DB.byName(“superadmin”)).findCount() QDbEmailQueue().findCount()引发下一个异常: 在这两种情况下,我的实体类的配置与k

我正在尝试使用Ebean框架ORM查询不同的postgres数据库。 根据文档和文档,对我的单个数据库的查询工作正常。但是为了解决另一个问题,我必须通过DB.byName(“name”)显式地调用它。我怎样才能避免这个明确的呼叫

明确地说,第一个例子——事实上,第二个——我希望它是:

  • QDbEmailQueue(DB.byName(“superadmin”)).findCount()

  • QDbEmailQueue().findCount()
    引发下一个异常:

  • 在这两种情况下,我的实体类的配置与kotlin中的相同:

    @Entity
    @DbName(value = "superadmin")
    @Table(name = "email_queue")
    class DbEmailQueue(
        @Id
        val emailQueueId: Int
        ...
    ): Model("superadmin")
    
    在这两种情况下,EbeanConfigProvider.java具有相同的配置,如:

    和application.yaml根据以下内容:

    只需更新一个版本。 我有埃宾12.1.10。
    在12.1.11版本中,问题仍然存在,但在12.1.12和12.1.13版本中,一切都按我所希望的方式运行(从12.2.1开始,问题出现了不同的例外情况)

    您使用的Ebean版本是什么?使用@DbName生成的查询bean将使用该名称获取正确的数据库。查看
    QDbEmailQueue()
    @RobBygrave-ebean 12.1.10的生成源代码。是的,它已经用提供的数据库名称生成了构造函数,但它仍然并没有work@RobBygrave谢谢你的提示。我以前尝试过新版本,但看起来我得到的是坏版本。现在我只是尝试了12.1.10之后的每一个版本,发现其中有两个版本可以按照我的要求工作。
    @Entity
    @DbName(value = "superadmin")
    @Table(name = "email_queue")
    class DbEmailQueue(
        @Id
        val emailQueueId: Int
        ...
    ): Model("superadmin")
    
    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;
                }
            }
        }
    }
    
    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