使用多数据库时,一个数据库称为默认数据库。我们需要为仅应在非默认数据库上使用的实体 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)。