2011-05-14 95 views
4

我正在開發一個由2個其他的maven模塊組成的webapp。,hsqldb url不會接受相對路徑。是由於maven配置?

我有代表數據庫層的模型模塊。它有彈出應用程序上下文test-model-config.xmltest/resources/META-INF進行測試和屬性文件test/resources' default package。和model-config.xmlresources/META-INF這是活的上下文,它應該從web應用程序中選擇屬性。 到現在建立精細,做工精細沒有問題

- <!-- test-model-config.xml and model-config.xml have the same thing--> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 

這裏只是一個測試/資源屬性的片段

jdbc.driverClassName=org.hsqldb.jdbcDriver 
jdbc.username=sa 
jdbc.password= 
jdbc.url=jdbc:hsqldb:file:target/mydb;create=true 

存在具有相同類型的conf其中的另一個模塊服務有一個測試配置和一個活的配置files.this一個太分開沒有問題.builds罰款,工作正常。

現在web應用程序有webapp-config.xml/web pages/WEB-INFgeneral.properties爲模型和服務模塊所需的所有屬性。所以general.propertieswebapp-log4j.properties都在webapp.here的resources' default packagewebapp-config.xml

<import resource="classpath:META-INF/model-config.xml" /> 
    <import resource="classpath:META-INF/service-config.xml" /> 
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:general.properties</value> 
      <value>classpath:webapp-log4j.properties</value> 
     </list> 
    </property> 
    </bean> 

片段在general.properties我們

jdbc.driverClassName=org.hsqldb.jdbcDriver 
jdbc.username=sa 
jdbc.password= 
jdbc.url=jdbc:hsqldb:file:classpath:target/mynewdb;create=true 
// .... 

還建立精細和運行罰款的問題。

:日誌說:

java.sql.SQLException中:文件輸入/輸出錯誤的類路徑:目標/ mynewdb.properties java.io.FileNotFoundException:類路徑:目標/ mynewdb.properties。新的(沒有這樣的文件或目錄)完整的調試輸出here

我真的很驚訝,因爲這是我第一次面對這種error.it的運行良好,具有絕對的URL爲/media/Repo/myproject/mydb;create=true,但這個想法是讓它在webapp目標中以便在目標文件夾被刪除時被刪除。

嗯,我沒有線索,現在已經2天了。 id如何解決這個問題?在這裏,我不是在做什麼?是由於maven配置? 我的pom可以看到here 感謝您閱讀本文。

回答

2

我認爲general.properties中的jdbc.url的語法不正確 - 您無法指定classpath的位置file - 它必須是絕對路徑或相對路徑。請參閱jdbcConnection javadoc

+0

我刪除了classpath關鍵字。它在那裏,因爲我使用模型模塊工作得很好。即使我刪除了classpath既不'jdbc.url = jdbc:hsqldb:file:mynewdb; create = true'也不''jdbc.url = jdbc:hsqldb:file :/ mynewdb; create = true'也不是'jdbc.url = jdbc:hsqldb:file:/ target/mynewdb; create = true'也不是'jdbc.url = jdbc:hsqldb:file:target/mynewdb; create = true'工作,但我相信,它遵循連接字符串規則: jdbc:hsqldb:file: []'(與傳統表單相同的語義) – 2011-05-14 11:23:21

1

數據庫文件路徑相對於JVM的當前工作目錄。

如果您從Maven sunfire插件(例如)運行JVM,則必須設置屬性workingDirectory(或任何其他插件的相應選項)。

您可以使用res:模式而不是file:從classpath中獲取數據庫,但它僅限於只讀訪問。

0

我的HSQLDB文件數據庫是通過以下JDBC URL工作:

jdbc:hsqldb:res:/db/mydb 

其中mydb的是HSQLDB文件的名稱,並位於以下目錄:

/WEB-INF/classes/db 
+0

正如伊夫馬丁指出的,這種解決方案的工作原理,但會將數據庫限制爲只讀訪問。 – 2013-07-15 13:17:41