我目前正在开发我的第一个基于JAX-RS的REST服务,为了根据我正在执行服务的环境访问不同的数据库,我将配置文件添加到pom.xml
。基于当前选择的配置文件,我能够创建配置文件,这使我可以建立与本地数据库的连接。
但是,我还使用此信息创建数据库和表,并使用dbunit将一些测试数据加载到其中。问题是,为所有配置文件创建和删除了数据库,但我只是想为测试配置文件重新创建数据库。如果我使用生产或开发配置文件,那么只要对数据库表进行了结构更改,就应该更改数据库。
所以我的问题是我如何根据当前选择的配置文件执行插件操作。因此,请考虑以下示例。如果我使用test
设置个人资料maven clean install -P test
,如何更改执行以便执行?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>${sql.maven.plugin.version}</version>
<!-- Specify the dependent jdbc driver -->
<dependencies>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.jdbc.version}</version>
</dependency>
</dependencies>
<!-- Common configuration shared by all executions -->
<configuration>
<driver>${database.jdbc.driverClass}</driver>
<url>${database.jdbc.connectionURL}</url>
<!-- You can comment out username/password configurations and have maven
to look them up in your settings.xml using ${settingsKey} -->
<username>${database.jdbc.username}</username>
<password>${database.jdbc.password}</password>
<settingsKey>postgres-db</settingsKey>
<!-- All executions are ignored if -Dmaven.test.skip=true -->
<skip>${maven.test.skip}</skip>
</configuration>
<executions>
<execution>
<id>drop-db-before-test-if-any</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<!-- need another database to drop the targeted one -->
<url>jdbc:postgresql://localhost:5432</url>
<autocommit>true</autocommit>
<sqlCommand>DROP DATABASE ${database.jdbc.dbName};</sqlCommand>
<!-- ignore error when database is not available -->
<onError>continue</onError>
</configuration>
</execution>
<execution>
<id>create-db</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<url>jdbc:postgresql://localhost:5432</url>
<!-- no transaction -->
<autocommit>true</autocommit>
<sqlCommand>CREATE DATABASE ${database.jdbc.dbName};</sqlCommand>
</configuration>
</execution>
<execution>
<id>create-tables</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<delimiterType>row</delimiterType>
<srcFiles>
<srcFile>src/main/sql/spozz-schema.sql</srcFile>
</srcFiles>
</configuration>
</execution>
</executions>
</plugin>