我正在为学校做一个项目,需要在maven项目中用postgresql替换hsqldb。
目前我们通过运行
来启动hsql Servermvn exec:java -P hsqldb
据我所知,这会查找pom.xml中的hsqldb配置文件
<profile>
<id>hsqldb</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.hsqldb.server.Server</mainClass>
<arguments>
<argument>-database.0</argument>
<argument>db/name</argument>
<argument>-dbname.0</argument>
<argument>name</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
所以我需要使用postgres设置重新发布这部分,我已经将postgres添加为依赖。
<mainClass>ServerClass</mainClass>
是我最大的问题,因为我无法在postgresql jar中找到主服务器类
答案 0 :(得分:7)
PostgreSQL不是内存中的可嵌入服务器。它不能只作为库加载并运行。
您需要一些测试工具控制代码:
initdb
临时数据
根据需要修改postgresql.conf
,方法是添加行,或启用include_dir
并删除文件。如果您只需要一个简单的配置,您可以跳过此步骤; port
之类的东西可以通过环境变量设置,而其他许多东西可以用-c
标志设置为服务器启动命令。
生成一个随机端口号以使用
启动服务器 - 使用Java postgres -D the_datadir
管理运行Process
新服务器实例。您可以使用-c
传递自定义配置值,也可以设置环境变量来控制行为。
通过JDBC和CREATE DATABASE
连接,然后运行您的测试设置
运行测试
通过终止您启动的流程来停止服务器。
删除datadir
你想要在一个具有适当临时目录处理的类中进行进程管理,在不干净的出口上进行清理(杀死Pg服务器并在异常时删除datadir)等。
如果您无法找到罐装测试安全带代码,我会感到惊讶。我想知道我们是否应该向PgJDBC添加一些并将其捆绑在驱动程序中?如果你发现任何好的东西,或写任何好的东西,请通过评论这个答案来ping我,我会考虑将它作为PgJDBC的实用程序类包含在内。
也就是说,在已经在服务器上运行的现有PostgreSQL实例中,在新创建的测试数据库中运行测试更为常见。您只需使用PostgreSQL用户名/密码/主机/端口/数据库配置您的测试套件(或者让它连接到postgres
数据库,CREATE
和DROP
数据库。毕竟,总是需要一些配置:安装或编译PostgreSQL,确保二进制文件在PATH
等。
另一种选择是使用Amazon RDS:使用AWS RDS API启动新的PostgreSQL实例并将其用于测试。这可能是不切实际的,除非你的测试由于设置时间和最小运行时间而长时间运行,但它是另一种选择,就像Heroku的类似服务一样。
答案 1 :(得分:0)
我相信你需要这个:
<mainClass>org.postgresql.Driver</mainClass>