使用多数据库时,一个数据库称为默认数据库。我们需要为仅应在非默认数据库上使用的实体 Bean 执行 4 项操作。

模型构造函数

使用 io.ebean.Model 构造函数,该构造函数采用应使用的数据库的字符串名称。

...
@DbName("other")
@MappedSuperclass
public abstract class OtherBaseDomain extends Model {

  public OtherBaseDomain() {
    super("other");             // "other" -> database name
  }
  ...
}
...
@DbName("other")
@MappedSuperclass
open class OtherBaseDomain : Model("other") {  // "other" -> database name

 ...

}

所有扩展此模型的实体 Bean 在 save()delete() 时都将使用已命名的数据库。

@DbName

@DbName 放置在映射超类或单个实体 Bean 上。在生成查询 Bean 时,查询 Bean 生成器会读取此内容,以便使用已命名的非默认数据库执行此实体 Bean 类型的查询。

...
@DbName("other")  // "other" -> database name
@MappedSuperclass
public abstract class OtherBaseDomain extends Model {

  public OtherBaseDomain() {
    super("other");             // "other" -> database name
  }
  ...
}
...
@DbName("other")   // "other" -> database name
@MappedSuperclass
open class OtherBaseDomain : Model("other") {  // "other" -> database name

 ...

}

对于所有扩展 OtherBaseDomain 的实体 Bean,其查询 Bean 现在将默认使用已命名的数据库。

查找器构造函数

如果使用 io.ebean.Finder,我们同样使用采用应使用的数据库的字符串名称的构造函数。

...
public class CustomerFinder extends Finder {

  public CustomerFinder() {
    super("other");             // "other" -> database name
  }
  ...
}
...
open class CustomerFinder : Finder("other") {  // "other" -> database name
 ...
}

现在,使用 CustomerFinder 上的方法将默认使用已命名的数据库。

注册实体类型

我们还需要将一些实体类型注册到默认数据库,并将一些实体类型注册到其他非默认数据库。

请注意,从 Ebean 12.2.1 版开始,查询 Bean 生成器将生成代码以将实体 Bean 类型注册到适当的数据库。

创建 ServerConfigProvider 的实现,该实现根据名称将实体 Bean 注册到适当的数据库。

public class RegisterDomainBeans implements ServerConfigProvider {

  private static final String OTHER = "other";

  private static final String DB = "db";

  @Override
  public void apply(ServerConfig serverConfig) {

      log.debug("register beans for {}", serverConfig.getName());
      if (DB.equals(serverConfig.getName())) {
        // the default database
        serverConfig.addClass(DCustomer.class);
        serverConfig.addClass(DOrder.class);
        serverConfig.addClass(DProduct.class);
        ...

      } else if (OTHER.equals(serverConfig.getName())) {
        // second OTHER database
        serverConfig.setDefaultServer(false);
        serverConfig.addClass(OSales.class);
        serverConfig.addClass(OMarket.class);
        ...

      }
  }
}

添加服务加载器 src/main/resources/META-INF/services/io.ebean.config.ServerConfigProvider 文件,以指定我们的 ServerConfigProvider 实现(例如 RegisterDomainBeans)。