2016-09-23 70 views
0

我正在开发一个Spring应用程序,其中一切都使用maven配置(在pom.xml)。我的应用程序使用PostgreSQL数据库,但单元测试使用内存中的HSQLDB数据库。使用maven配置HSQLDB

我只是遇到TEXT列的问题,因为它们本身不受HSQLDB支持。在我的实体类,我有:

private @Column(columnDefinition = "text") String propertyName; 

这正常工作与Postgres的,但HSQLDB正在生成以下错误:type not found or user lacks privilege: TEXT。该表格并未创建,当然,因为我的大多数测试都失败了。

我发现我需要activate PostgreSQL compatibility才能通过将sql.syntax_pgs设置为true来工作。

我的问题是:我在哪里放这个设置?我想把它放在pom.xml因为一切都在那里配置,但我不知道在哪里。

对于为例,我有:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>-Dspring.profiles.active=test</argLine> 
    </configuration> 
</plugin> 

我可以以某种方式使用此设置添加一个<argLine>

回答

1

。您可以根据您的要求覆盖属性文件中的这些属性或通过其他配置。您可以将“sql.syntax_pgs = true”设置为HSQLDB连接URL。例如,在弹簧启动的情况下,这将如下所示。

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
       <argLine>-Dspring.datasource.url=jdbc:hsqldb:mem:PUBLIC;sql.syntax_pgs=true</argLine> 
     </configuration> 
</plugin> 
0

,您可以在数据源配置当您添加它使用默认的连接属性HSQLDB依赖它设置为给here

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:mem:PUBLIC;sql.syntax_pgs=true" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 
+0

我该把这个放在哪里?另外我只想在使用'test'配置文件时生效。 – deadbeef

+0

当你为测试配置HSQLDB时,你需要把它放在这里。该属性将被设置为使用hsqldb的所有测试。 –

+0

我没有在任何地方配置HSQLDB,我只是将它作为依赖项添加到'pom.xml'中,然后在运行测试时由maven自动使用它。 – deadbeef