Java 如何在ebean中使用多个数据库
我正在尝试使用Ebean框架ORM查询不同的postgres数据库。 根据文档和文档,对我的单个数据库的查询工作正常。但是为了解决另一个问题,我必须通过DB.byName(“name”)显式地调用它。我怎样才能避免这个明确的呼叫 明确地说,第一个例子——事实上,第二个——我希望它是: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
QDbEmailQueue(DB.byName(“superadmin”)).findCount()
QDbEmailQueue().findCount()
引发下一个异常:
@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