从java代码初始化一些轻量级PostgreSQL实例(可能在某些临时目录中)的最简单方法是什么。我需要一些临时数据库来运行测试;所以最好的方法是在运行测试之前/之后创建/删除该集群(数据库)。
是否有一些Java库?没有外部脚本,是否可以使用纯Java代码?
我的堆栈是Java,Maven,jetty,TestNG,PostgreSQL。
答案 0 :(得分:2)
使用专为此目的设计的the PostgreSQL maven plugin。
如果它无法在PATH
找到它们,你需要告诉它PostgreSQL的二进制文件在哪里。
如果你想自己动手,你需要:
initdb
调用ProcessBuilder
以创建临时数据目录。pg_hba.conf
进行必要的更改或生成新的postgres
调用ProcessBuilder
启动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'
然后生成/复制包含所需PostgreSQL配置设置的myapp-test.conf
文件。如果由于命令行长度限制而有很多设置和/或复杂设置,这可能会更容易,并且它可以更具可读性/可调试性。
启动PostgreSQL进行测试时,请勿使用默认端口。始终覆盖端口。
答案 1 :(得分:0)
取决于您究竟需要什么。只有数据库才能启动并运行?还是在测试之间管理数据?
testcontainers将帮助您启动和停止数据库。
dbunit将帮助您准备测试数据。
缺点:testegration - 旨在为您提供完整,随时可用且可扩展的生命周期(披露:我是创建者)。
缺点:您也可以自己填补空白(ProcessBuilder
,执行自定义脚本)。一如既往的交易:时间与金钱