2016-11-18 81 views
0

我一直在想如何通過配置文件運行嵌入式數據庫,並且能夠通過郵遞員運行REST調用。 這是我到目前爲止有:用mvn碼頭運行嵌入式H2數據庫:運行

<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:執行@我-執行碼頭:運行時,servlet運行,但一旦我所說的休息方法,我得到

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:[email protected] jetty:run擺脫了驅動程序和URL錯誤的,但還是堅持了:

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

當調用從郵遞員GET。有什麼想法嗎?

回答

0

我覺得很難相信當你調用一個REST方法時(Failed to execute goal ...)你會得到一個Maven錯誤。除此之外,我認爲你真正的問題是這樣的:你使用H2作爲內存數據庫,這意味着只要你的應用程序運行就可以使用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的應用程序的連接字符串(「Execute SQL on Connection」),就像這樣:

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

H2是一個真棒數據庫。祝你好運!

+0

我最終沒有使用內存數據庫。我真的希望能夠(因爲它非常方便!)。但你說得對,因爲它不會持續下去,我希望我能弄清楚。謝謝你的建議。由於嘗試在其餘呼叫中連接到數據庫,Maven錯誤彈出。但是,因爲我切換到使用H2服務器,並連接到該數據庫,我不再因爲數據庫持續存在而出現錯誤。再次感謝! – Kevin