2011-05-14 2 views
4

나는 2 개의 다른 메이븐 모듈로 구성된 웹 애플리케이션을 개발 중이다.in java webapp, hsqldb url은 상대 경로를 허용하지 않습니다. 그것은 maven 구성 때문입니까?

i는 데이터베이스 layer.it 테스트 및 test/resources' default package의 속성 파일에 대한 test/resources/META-INF에 스프링 애플리케이션 컨텍스트 test-model-config.xml을 가지고 representes 모델 모듈을 가지고있다. 라이브 컨텍스트이고 웹 응용 프로그램에서 속성을 선택한다고 가정되는 resources/META-INFmodel-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 

시험/자원 속성의 스 니펫입니다 거기에 테스트 구성 및 라이브 config files.this 하나가 너무 별도로 아무 문제가 없습니다. 빌드 벌금, 잘 작동합니다.

이제 webapp에는 모델 및 서비스 모듈에 필요한 모든 속성에 대해 /web pages/WEB-INFgeneral.propertieswebapp-config.xml이 있습니다. 그래서 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> 

의 조각에 있습니다.

1 : 로그 메시지 :

은 java.sql.SQLException : 입력/출력 오류 래스 파일 : 타겟/mynewdb.properties의 java.io.FileNotFoundException을 : 클래스 경로 대상/mynewdb.properties한다. 이 내가 error.it의이 /media/Repo/myproject/mydb;create=true로 절대 URL로 잘 실행의이 종류를 마주하고있어 처음이기 때문에 새로운 (해당 파일 또는 디렉토리) 전체 디버그 출력이 here

난 정말 놀랐어요 없지만 아이디어는 webapp 타겟에있는 것입니다. 대상 폴더가 삭제되면 삭제됩니다.

글쎄 나는 실마리가 없으며 2 일이 지났다. 어떻게이 문제를 해결할 수 있습니까? 여기 내가 뭔가 보이지 않거나하는거야? 그것은 maven 구성 때문입니까? 내 pom을 볼 수 있습니다 here 이것을 읽어 주셔서 감사합니다.

답변

2

나는 general.properties에서 jdbc.url의 구문이 잘못 생각 - 당신이 file에 대한 classpath 위치를 지정할 수 없습니다 - 그것은 절대 또는 상대 경로이어야한다. jdbcConnection 참조 javadoc

+0

내가 제거 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; 작동하지만, 나는 연결 문자열 규칙을 따른다 : jdbc : hsqldb : file : [] '(레거시 양식과 동일한 의미) –

1

데이터베이스 파일 경로는 JVM의 현재 작업 디렉토리와 관련이 있습니다.

Maven sunfire plugin (예 :)에서 JVM을 실행하는 경우 workingDirectory (또는 다른 플러그인의 해당 옵션) 속성을 설정해야합니다.

file: 대신 res: 모드를 사용하여 데이터베이스를 클래스 경로에서 가져올 수 있지만 읽기 전용 액세스로 제한됩니다.

0

내 HSQLDB 파일 데이터베이스는 다음과 같은 JDBC URL을 사용하여 노력하고 있습니다 : MYDB는 HSQLDB 파일의 이름이고 다음 디렉토리에 있습니다

jdbc:hsqldb:res:/db/mydb 

:

/WEB-INF/classes/db 
+0

Yves Martin이 지적했듯이이 솔루션은 작동하지만 데이터베이스를 읽기 전용 액세스로 제한하십시오. –

관련 문제