ebean如何使用多个数据库
How to use multiple databases with ebean
我正在尝试对不同的 postgres 数据库使用 Ebean 框架 ORM 查询。
按照 these and these 文档,对我的单个数据库的查询工作正常。但要解决另一个问题,我必须通过 DB.byName("name") 显式调用它。我怎样才能避免这种显式调用?
为了清楚起见,第一个示例 - 事实上,第二个 - 正如我希望的那样:
QDbEmailQueue(DB.byName("superadmin")).findCount()
有效
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
在这两种情况下,我的实体-class 都像 kotlin 中那样配置:
@Entity
@DbName(value = "superadmin")
@Table(name = "email_queue")
class DbEmailQueue(
@Id
val emailQueueId: Int
...
): Model("superadmin")
在这两种情况下,EbeanConfigProvider.java 的配置与 here:
相同
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根据这个doc:
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 开始问题再次出现,但有不同的异常)
我正在尝试对不同的 postgres 数据库使用 Ebean 框架 ORM 查询。 按照 these and these 文档,对我的单个数据库的查询工作正常。但要解决另一个问题,我必须通过 DB.byName("name") 显式调用它。我怎样才能避免这种显式调用?
为了清楚起见,第一个示例 - 事实上,第二个 - 正如我希望的那样:
QDbEmailQueue(DB.byName("superadmin")).findCount()
有效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
在这两种情况下,我的实体-class 都像 kotlin 中那样配置:
@Entity
@DbName(value = "superadmin")
@Table(name = "email_queue")
class DbEmailQueue(
@Id
val emailQueueId: Int
...
): Model("superadmin")
在这两种情况下,EbeanConfigProvider.java 的配置与 here:
相同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根据这个doc:
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 开始问题再次出现,但有不同的异常)