문제

Maven 프로젝트에서 단위 테스트를 위해 Apache Derby Embedded Database를 사용하고 있습니다. 불행히도 테스트를 실행할 때마다 derby.log 프로젝트의 루트에 파일. 데이터베이스 자체는 target 디렉토리 (jdbc:derby:target/unittest-db;create=true) 그래서 그것은 문제가 아닙니다. 상담 후 참조 안내서 나는 설정을 시도했다 logDevice JDBC URL의 매개 변수 (jdbc:derby:target/unittest-db;create=true;logDevice=/mylogs)하지만 그것은 다른 로그를위한 것 같습니다. derby.log 여전히 나타납니다.

모든 도움은 대단히 감사합니다.

도움이 되었습니까?

해결책

당신은 제거 할 수 있습니다 derby.log 다음 수업을 작성하여 파일

public class DerbyUtil {
    public static final OutputStream DEV_NULL = new OutputStream() {
        public void write(int b) {}
    };
}

JVM 시스템 속성을 설정합니다 derby.stream.error.field, 예를 들어 다음 JVM 명령 줄 인수를 사용합니다.

-Dderby.stream.error.field=DerbyUtil.DEV_NULL

그 기한이 누구에게 신용.

다른 팁

Derby는 Java System 속성을 사용하여 오류 로그 메시지가 작성된 파일의 이름을 지정할 수 있습니다. derby.stream.error.file. 기본값은 'derby.log'입니다.

제거하기 위해 derby.log Maven SureFire 테스트 단계에서는 플러그인 구성에 다음과 같이 속성 정의를 추가합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <systemProperties>
            <property>
                <name>derby.stream.error.file</name>
                <value>target/derby.log</value>
            </property>
        </systemProperties>
    </configuration>
</plugin>

Derby.Properties 파일에 다음을 포함하십시오.

derby.stream.error.file=/dev/null

( 또는

derby.stream.error.file=\\Device\\Null

Windows에서)

통합 테스트의 경우 상황이 단순보다 조금 더 까다로울 수 있습니다. 확실한 재산. 속성을 지정합니다 derby.stream.error.file 에서 maven-failsafe-plugin 서버 환경이 해당 플러그인에서 상속되지 않으므로 작동하지 않습니다 (분명히 사용 maven-surefire-plugin 차이가 없습니다).

대신 실제 서버 시작 플러그인을 수정해야합니다. 다음 예는 다음과 같습니다 maven-jetty-plugin:

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <configuration>
        <systemProperties>
            <!-- Get rid of that missplaced derby.log. -->
            <systemProperty>
                <name>derby.stream.error.file</name>
                <value>${project.build.directory}/derby.log</value>
            </systemProperty>
        </systemProperties>
    </configuration>
</plugin>

어떤 이유로 우리는 사용합니다 systemProperty 그리고 단지 property 확실한 솔루션에서와 같이.

Derby를 집으로 설정할 수도 있습니다 target/derby 또는 target을 통해:

System.setProperty("derby.system.home", new File("target/derby").getAbsolutePath());

그런 다음 JDBC URL을 사용하십시오 jdbc:derby:unittest-db;create=true. 그런 다음 Derby.log가 오른쪽 폴더에 나타납니다.

구성에 액세스 할 수없는 경우 연결하기 전에이를 실행할 수 있습니다.

System.setProperty("derby.stream.error.field", "MyApp.DEV_NULL");

나는 또 다른 해결책을 생각해 냈습니다. 이것을 시도하십시오. 그것은 나를 위해 일했다. 내가 여기서하는 일은 System.stream.error.file 경로를 변경하여 속성 파일 아래에있는 속성 중 하나로 설정했습니다. ApplicationContext.xml 파일에 아래 주어진 코드를 추가하면 작동합니다.

<bean id="setDerbyLog" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  <property name="targetClass"><value>java.lang.System</value></property>
  <property name="targetMethod"><value>setProperty</value></property>
  <property name="arguments">
    <list>
      <value>derby.stream.error.file</value>
      <value>${derby.stream.error.file}</value>
    </list>
  </property>
</bean>

이것은 당신에 대한 해결책이 아닙니다 derby.log 파일 문제 (많은 사람들이 이미 해결하는 방법을 보여준)가 아니라 제안입니다. 사용하지 않는 이유는 무엇입니까? 더비-메이븐-플루인 시험을 위해? 그것은 그것을 배치합니다 derby.log 아래에 파일 target/derby, 따라서 쓰레기를 남기지 않습니다.

설명대로 내 대답, 당신은 내가 쓴 Derby-Maven-Plugin을 통해 Derby를 데이터베이스로 사용할 수 있습니다. github 그리고 Maven Central을 통해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top