maven开始postgres服务器

时间:2014-06-04 11:05:11

标签: java postgresql maven hsqldb

我正在为学校做一个项目,需要在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>

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

<mainClass>ServerClass</mainClass>

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

2 个答案:

答案 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数据库,CREATEDROP数据库。毕竟,总是需要一些配置:安装或编译PostgreSQL,确保二进制文件在PATH等。

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

答案 1 :(得分:0)

我相信你需要这个:

<mainClass>org.postgresql.Driver</mainClass>