【发布时间】:2015-10-13 20:27:12
【问题描述】:
要在内存中创建两个不同的 H2 实例。为了确保发生这种情况,我用相同的 shema 和不同的数据初始化了两个实例。这样当我使用 DAO 查询时,从不同的 DataSource 中挑选出不同的数据集。然而,这并没有发生。我究竟做错了什么?如何正确命名 H2 的实例?
@Bean(name = "DS1")
@Primary
public EmbeddedDatabase dataSource1() {
return new EmbeddedDatabaseBuilder().
setType(EmbeddedDatabaseType.H2).
setName("DB1").
addScript("schema.sql").
addScript("data-1.sql").
build();
}
@Bean(name = "DS2")
public EmbeddedDatabase dataSource2() {
return new EmbeddedDatabaseBuilder().
setType(EmbeddedDatabaseType.H2).
setName("DB2").
addScript("schema.sql").
addScript("data-2.sql").
build();
}
【问题讨论】:
-
你的
schema.sql是在创建同名数据库吗? -
你不能声明两个相同类型的主要 bean - 这可能是意外行为的原因
-
这是复制粘贴中的拼写错误。实际上只有第一个 DS 是@Primary。还是不行。
-
@willOEM - 是的 schema.sql 创建相同的表。但数据不一样。通过这种方式,我可以测试我的代码是否真的从 2 个不同的数据库中获取数据。
-
您可以连接到您的 H2 实例并查看两个数据库吗?我的猜测是只有一个被覆盖。
标签: spring spring-boot datasource h2