将JDBC URL传递给openjpa-maven-plugin以刷新PostgreSQL中的数据

时间:2012-06-18 12:58:07

标签: postgresql openjpa openjpa-maven-plugin

pom.xml {取自http://struberg.wordpress.com/2012/05/10/using-jpa-in-real-projects-part-1/):

<properties>
    <openjpa.sql.action>refresh</openjpa.sql.action>
    <database.driver.name>org.postgresql.Driver</database.driver.name>
    <database.connection.url>jdbc:postgresql://myURL</database.connection.url>
    <database.user>user</database.user>
    <database.password>password</database.password>
</properties>

<plugin>
    <groupId>org.apache.openjpa</groupId>
    <artifactId>openjpa-maven-plugin</artifactId>
    <version>${openjpa-version}</version>
    <configuration>
        <includes>**/entity/*.class</includes>
        <excludes>**/entity/Q*.class</excludes>
        <addDefaultConstructor>true</addDefaultConstructor>
        <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
        <sqlAction>${openjpa.sql.action}</sqlAction>
        <connectionDriverName>${database.driver.name}</connectionDriverName>
            <connectionProperties>
                jdbcUrl=${database.connection.url},
                user=${database.user},
                password=${database.password},
            </connectionProperties>
        </configuration>
        <executions>
            <execution>
                <id>enhancer</id>
                <phase>process-classes</phase>
                <goals>
                    <goal>enhance</goal>
                    <goal>sql</goal>
                </goals>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>org.apache.openjpa</groupId>
                <artifactId>openjpa-all</artifactId>
                <version>${openjpa-version}</version>
            </dependency>
        </dependencies>
    </plugin>

由于某种原因,URL未正确传递,我得到了

  

目标org.apache.openjpa的执行增强器:openjpa-maven-plugin:2.2.0:sql failed:无法获取驱动程序类“org.postgresql.Driver”和URL“null”的连接。您可能指定了无效的网址。 (org.apache.openjpa:OpenJPA的-行家-插件:2.2.0:SQL:增强剂:过程类)

我尝试用jdbcUrlconnectionProperties等替换url中的URL。没有任何帮助。但是,我可以将网址放在persistence.xml中,而 可以工作:

<property name="javax.persistence.jdbc.url"
    value="jdbc:postgresql://myURL" />

从Maven属性获取驱动程序,用户和密码。但是,由于此URL仅用于生成DDL(数据源是在运行时以不同的方式创建的),因此我更愿意将其放在pom.xml中,而不会污染persistence.xml。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

我使用commons-dbcp BasicDataSource来获取这样的连接:

<connectionDriverName>org.apache.commons.dbcp.BasicDataSource</connectionDriverName>
<connectionProperties>
    driverClassName=${database.driver.name},
    url=${database.connection.url},
    username=${database.user},
    password=${database.password},
</connectionProperties>