我想使用内存数据库来测试我的应用程序,但是它需要支持XA distributed transactions。我对内存数据库的第一个想法是HSQLDB,但似乎不支持XA。有吗?
看起来像H2支持此。
都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());