是否有支持XA分布式事务的内存JDBC数据库?

时间:2010-09-10 13:03:56

标签: java jdbc transactions

我想使用内存数据库来测试我的应用程序,但它需要支持XA distributed transactions。我对内存数据库的第一个想法是HSQLDB,但似乎不支持XA。有没有?

2 个答案:

答案 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());