2011-05-14 9 views
4

私は2つの他のモジュールで作られたwebappを開発しています。がjava webappの場合、hsqldb urlは相対パスを受け入れません。これはMavenの設定によるものですか?

私はテストとtest/resources' default packageのプロパティファイルに対してtest/resources/META-INFに春のアプリケーションコンテキストtest-model-config.xmlを持っているlayer.itデータベースをrepresentesモデルモジュールを持っています。ライブコンテキストであり、ウェブアプリケーションからプロパティを選択するはずのにmodel-config.xmlがあります。今罰金のビルドまで は、ここでは何の問題

- <!-- 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> 

を正常に動作しないconfのところの同じ種類を持っている他のモジュールのサービスがある

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

テスト/リソースのプロパティのちょうどスニペットですテスト設定とライブ設定ファイルがあります。これも個別に問題はありません。ビルドはうまく動作し、正常に動作します。

モデルとサービスモジュールに必要なすべてのプロパティについて、webapp-config.xml/web pages/WEB-INFgeneral.propertiesになりました。そうgeneral.propertieswebapp-log4j.propertiesたちは

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

、それはまた、罰金構築し、問題と正常に動作していgeneral.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> 

の抜粋です。

:ログは言う:

ます。java.sql.SQLException:ターゲット/ mynewdb.propertiesのjava.io.FileNotFoundException:クラスパス:ターゲット/ mynewdb.properties入力/出力エラー・クラスパスをファイルを。 (そのようなファイルまたはディレクトリ)新しいフルデバッグ出力は、私はこれは私が/media/Repo/myproject/mydb;create=trueとして絶対URLをerror.itの実行中の罰金のこの種に直面しています初めてなので、本当に驚いているが、here

ですアイデアは、Webアプリケーションのターゲットにそれを持つことですターゲットフォルダが削除されると削除されます。

私は手がかりがありません。それは2日後です。 これをどのように修正できますか?ここに何か私はseei /していないのですか?これはMavenの設定によるものですか? 私のpomが表示されますhere これを読んでいただきありがとうございます。

答えて

2

私はgeneral.propertiesjdbc.urlの構文が間違っていると信じて - あなたはfileためclasspath場所を指定することはできません - それは、絶対パスまたは相対パスである必要があります。 jdbcConnectionを参照してくださいjavadoc

+0

iが削除classpathキーワード。 'jdbc.url = jdbc:hsqldb:file:mynewdb; create = true'も' jdbc.url = jdbc:hsqldb:fileもクラスパスを削除しなくても、モデルモジュール用に使用しています。 jdbc.url = jdbc:hsqldb:file:/ target/mynewdb; create = true'または 'jdbc.url = jdbc:hsqldb:file:target/mynewdb; create = true'は次のようになります。 jdbc:hsqldb:file: [] '(従来のフォームと同じセマンティクス) –

1

データベースファイルのパスは、JVMの現在の作業ディレクトリとの相対パスです。

Maven sunfireプラグインなどからJVMを実行する場合は、プロパティworkingDirectory(または他のプラグインの対応するオプション)を設定する必要があります。

file:の代わりにres:モードを使用してデータベースをクラスパスから取得できますが、読み取り専用アクセスに制限されています。

0

マイHSQLDBファイルデータベースには、以下のJDBC URLを使用して作業している:MYDBは、HSQLDBのファイルの名前であり、以下のディレクトリにあります。

jdbc:hsqldb:res:/db/mydb 

/WEB-INF/classes/db 
+0

Yves Martinが指摘したように、この解決策は機能しますが、データベースを読み取り専用アクセスに制限します。 –

関連する問題