maven开始postgres服务器

1 java postgresql hsqldb maven

我正在为学校做一个项目,需要在maven项目中用postgresql替换hsqldb.

目前我们通过运行启动hsql Server

mvn 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>
Run Code Online (Sandbox Code Playgroud)

所以我需要使用postgres设置重新发布这部分,我已经添加了postgres作为依赖.

<mainClass>ServerClass</mainClass>
Run Code Online (Sandbox Code Playgroud)

是我最大的问题,因为我无法在postgresql jar中找到主服务器类

Cra*_*ger 7

PostgreSQL不是内存中的可嵌入服务器.它不能只作为库加载并运行.

您需要一些测试工具控制代码来:

  • initdb 临时数据库

  • postgresql.conf通过附加行或根据其中的启用include_dir和删除文件来根据需要进行编辑.如果您只需要一个简单的配置,您可以跳过此步骤; 类似的东西port可以通过环境变量设置,许多其他的东西可以用-c服务器启动命令的标志设置.

  • 生成要使用的随机端口号

  • 启动服务器 - postgres -D the_datadir使用Java Process管理运行新的服务器实例.您可以传递自定义配置值,-c也可以设置环境变量来控制行为.

  • 通过JDBC连接CREATE DATABASE然后运行测试设置

  • 运行测试

  • 通过终止您启动的进程来停止服务器.

  • 删除datadir

你需要在一个具有适当临时目录处理的类中进行进程管理,在不干净的出口上进行清理(杀死Pg服务器并在异常时删除datadir)等.

如果您无法找到罐装测试安全带代码,我会感到惊讶.我想知道我们是否应该向PgJDBC添加一些并将其捆绑在驱动程序中?如果你发现任何好的东西,或写任何好的东西,请通过评论这个答案来ping我,我会考虑将它作为PgJDBC中的实用程序类包含在内.

也就是说,在已经在服务器上运行的现有PostgreSQL实例中,在新创建的测试数据库中运行测试更为常见.你只要配置你的测试套件与PostgreSQL的用户名/密码/主机/端口/数据库(或让它连接到postgres数据库,并CREATEDROP数据库中).毕竟,总是需要一些配置:安装或编译PostgreSQL,确保二进制文件在PATH,等等.

另一种选择是使用Amazon RDS:使用AWS RDS API启动新的PostgreSQL实例并将其用于测试.这可能是不实际的,除非你的测试由于设置时间和最小运行时间而长时间运行,但它是另一种选择,就像Heroku的类似服务一样.