我想使用内存数据库来测试我的应用程序,但它需要支持XA distributed transactions。我对内存数据库的第一个想法是HSQLDB,但似乎不支持XA。有没有?
答案 0 :(得分:3)
看起来H2支持此功能。
答案 1 :(得分:0)
H2数据库和 HSQLDB 都支持它,即使在2019年也找不到任何其他Java嵌入式数据库。但是在这两个数据库中都没有正确实现:事务客户端断开连接后立即回滚。根据X / Open规范,当数据库准备事务时,其数据应被永久存储,并且必须可供以后提交。
在H2中,XA代码为is unmaintained。
如果您希望测试使用支持XA的数据库,则可以通过TestContainers项目使用Postgres:
@ClassRule
public static PostgreSQLContainer container = new PostgreSQLContainer<>("postgres:12.1")
.withCommand("postgres -c max_prepared_transactions=10");
然后创建一个像这样的数据源:
PGXADataSource dataSource = new PGXADataSource();
dataSource.setURL(container.getJdbcUrl());
dataSource.setUser(container.getUsername());
dataSource.setPassword(container.getPassword());
dataSource.setDatabaseName(container.getDatabaseName());