簡體   English   中英

使用mvn jetty運行嵌入式H2數據庫

[英]Running embedded H2 database with mvn jetty:run

我一直在嘗試找出如何通過配置文件運行嵌入式數據庫,以及如何通過郵遞員運行REST調用。 這是我到目前為止的內容:

<profile>
        <id>developRest</id>
        <build>
        <plugins>
        <plugin>
           <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <version>1.5</version>
            <dependencies>
                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <version>${h2.version}</version>
                </dependency>
            </dependencies>
            <configuration>
                <driver>org.h2.Driver</driver>
                <url>jdbc:h2:mem:test</url>
                <username>sa</username>
                <password>sa</password>
            </configuration>
            <executions>
                <execution>
                    <id>my-execution</id>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <autocommit>true</autocommit>
                        <srcFiles>
                            <srcFile>src/test/resources/table-ddl.sql</srcFile>
                            <srcFile>src/test/resources/insert-into-table.sql</srcFile>
                        </srcFiles>
                    </configuration>
                </execution>
            </executions>
        </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>${jetty.version}</version>
                <configuration>
                    <webApp>
                        <descriptor>src/main/webapp/WEB-INF/jetty.xml</descriptor>
                    </webApp>
                    <stopKey></stopKey>
                    <stopPort></stopPort>
                </configuration>
            </plugin>
        </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>com.h2database</groupId>
                <artifactId>h2</artifactId>
                <version>${h2.version}</version>
            </dependency>
        </dependencies>
    </profile>

我玩過階段游戲,但是似乎沒有任何東西可以堅持。 當我使用mvn sql:execute @ my-execution jetty:run運行此程序時,該servlet運行,但是一旦我調用rest方法,我就會得到

Failed to execute goal org.codehaus.mojo:sql-maven-plugin:1.5:execute (my-execution) on project myProject: The parameters 'driver', 'url' for goal org.codehaus.mojo:sql-maven-plugin:1.5:execute are missing or invalid我缺少什么才能使驅動程序和url有效? 謝謝你的幫助。

更新:使用mvn -PdevelopRest sql:execute@my-execution jetty:run擺脫了驅動程序和url錯誤,但仍然存在:

### Error querying database.  Cause: org.h2.jdbc.JdbcSQLException: Table "myTable" not found; SQL statement:

從郵遞員撥打GET時。 有什么想法嗎?

我很難相信您在調用REST方法時會遇到Maven錯誤( Failed to execute goal ... )。

除此之外,我認為您的真正問題是:您正在使用H2作為內存數據庫,這意味着只要您的應用程序運行,它就可以使用。 當您的應用程序消失時,您的數據庫也消失了。

在您執行多個插件的Maven上下文中,數據庫不會超過單個插件的執行時間。 my-execution實例化了一個內存數據庫,然后該數據庫消失了。 jetty-maven-plugin創建自己的內存數據庫,該數據庫沒有上一個數據庫中的任何DDL / SQL。

可能有多種方法可以解決此問題,例如:

  1. 不要使用內存數據庫,而是使用H2來寫出文件,例如jdbc:h2:/data/test ,或者,因為您正在使用Maven: jdbc:h2:${project.build.directory}/data/test
  2. 不要使用sql-maven-plugin初始化數據庫,而是直接在應用程序內部。 您可以這樣做:

    1. 使用一些自定義代碼,您只需放在測試類路徑上
    2. 通過將DDL / SQL添加到應用程序的連接字符串(“ 在連接上執行SQL ”),如下所示:

       jdbc:h2:mem:test;INIT=runscript from '~/table-ddl.sql'\\\\;runscript from '~/insert-into-table.sql'"; 

H2是一個了不起的數據庫。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM