2015-11-16 32 views
2

什么是从Java代码初始化一些轻量级PostgreSQL实例(可能在某个临时目录中)的最简单方法。我需要一些临时数据库来运行测试;所以最好的方法是在运行测试之前/之后创建/删除该群集(数据库)。用于测试目的的Postgres轻量级数据库

是否有一些Java库?是纯粹的Java代码可能,没有外部脚本?

我的堆栈是Java,Maven,jetty,TestNG,PostgreSQL。

+2

https://github.com/yandex-qatools/postgresql-embedded –

+0

也许你只需要DBUnit –

+0

@Mr_Thorynque:DBUnit仍然需要一个数据库来连接。 –

回答

1

使用the PostgreSQL maven plugin,这是专为此目的而设计的。

如果在PATH上找不到它们,您需要告诉它PostgreSQL的二进制文件在哪里。


如果你想推出自己你需要:通过ProcessBuilder

  • 调用initdb创建一个临时数据目录。
  • 进行必要的更改,以pg_hba.conf或通过ProcessBuilder生成一个新的
  • 调用postgres启动PostgreSQL的

ProcessBuilder必须设置PATH环境变量,以便PostgreSQL的可以找到它的其他二进制文件。

您不必生成自定义postgresql.conf,因为您只需在命令行上传递参数即可。

postgres -D some-datadir -c port=5599 -c listen_addresses='127.0.0.1' 

等等。但是,如果你愿意,你可以只是一个单一的行追加到默认postgresql.conf

include 'myapp-test.conf' 

然后生成/复制myapp-test.conf文件包含所有你想要的PostgreSQL的配置设置。如果由于命令行长度的限制,您有许多设置和/或复杂的设置,这可能会更容易,并且它可以更具可读性/可调试性。

启动PostgreSQL进行测试时不要使用默认端口。始终覆盖端口。

0

取决于你到底需要什么。只有数据库才能启动并运行?还是在测试之间管理数据?

  1. testcontainers将帮助您启动和停止db。

  2. dbunit将帮助您为测试准备数据。

    缺点:

    • 大量的工作需要创建和维护架构和数据。特别是当您的项目处于密集发展阶段时。
    • 它的另一个抽象层,所以如果你突然想使用一些数据库功能,是通过这个工具不支持,可能很难对它进行测试
  3. testegration - 意图,为您提供全面,准备使用和可扩展的生命周期(披露:我是创造者)。

    缺点:

    • 免费只针对小项目
    • 非常年轻的项目

你也可以填补自己的空白(ProcessBuilder,执行自定义脚本)。一如既往的交易:时间与金钱