Frage

Ich bin mit der Apache Derby Embedded-Datenbank für Unit-Tests in einem Maven-Projekt. Leider, wenn ich den Test ausführen ich mit der derby.log Datei im Root des Projektes am Ende. Die Datenbank selbst im target Verzeichnis erstellt wird (jdbc:derby:target/unittest-db;create=true), so ist das kein Problem. Nach Anhörung des Nachschlagewerks Ich versuchte, die logDevice Parametereinstellung damit auf der JDBC-uRL (jdbc:derby:target/unittest-db;create=true;logDevice=/mylogs), aber das scheint für ein anderes Protokoll zu sein, derby.log erscheint nach wie vor.

Jede Hilfe ist sehr geschätzt.

War es hilfreich?

Lösung

Sie können von derby.log Datei, indem loszuwerden der folgende Klasse

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

und die Einstellung der JVM-Systemeigenschaft derby.stream.error.field , zum Beispiel In das folgende JVM-Befehlszeilenargument verwenden:

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

Kredit zu denen es aufgrund .

Andere Tipps

Derby können Sie den Namen der Datei angeben, in dem die Fehlerprotokoll-Nachrichten, die Java-Systemeigenschaft geschrieben werden, mit derby.stream.error.file . Der Standardwert ist 'derby.log'.

Um von derby.log während der todsichere Testphase Maven loszuwerden, füge ich nur die Eigenschaft Definition in der Plugin-Konfiguration wie folgt:

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

Fügen Sie folgende in Ihrer derby.properties-Datei:

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

(oder

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

auf Windows)

Für die Integration testet die Situation ein wenig komplizierter sein könnte als die einfache todsicher Eigenschaft. die Eigenschaft derby.stream.error.file im maven-failsafe-plugin Festlegen als die Server-Umgebung von diesem Plugin erbt nicht nicht (offensichtlich mit maven-surefire-plugin macht keine Unterschiede).

Stattdessen müssen Sie den tatsächlichen Serverstart Plugin ändern. Das folgende Beispiel ist für die 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>

Beachten Sie, dass aus irgendeinem Grund, den wir systemProperty und nicht nur property wie in der todsichere Lösung verwenden.

Sie können auch nur gesetzt Derby nach Hause target/derby oder targetvia:

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

und verwenden Sie die JDBC-URL jdbc:derby:unittest-db;create=true. Dann erscheint derby.log in den richtigen Ordner.

Wenn Sie den Zugriff auf die Konfiguration nicht haben, können Sie dies ausführen, bevor Sie die Verbindung herstellen:

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

Ich habe kam mit einer anderen Lösung auf. Probieren Sie dies aus; es funktionierte für mich. Was ich hier zu tun ist, ich habe den System.stream.error.file Pfad geändert und setzen Sie ihn auf eine der Eigenschaften vorhanden unter meiner Eigenschaft Datei. Nur Hinzufügen der unten angegebenen Code in Ihre applicationContext.xml Datei funktioniert.

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

Dies ist keine Lösung für Ihr derby.log Datei Problem (die bereits zahlreiche Menschen gezeigt, wie zu lösen), sondern - ein Vorschlag. Warum verwenden Sie die Derby-Maven-Plugin für Ihre Tests? Sie stellt die derby.log Datei unter target/derby, also keinen Müll zu hinterlassen.

Wie in , können Sie Derby als Datenbank über die Derby-maven-Plugin, das ich geschrieben und ist auf GitHub und über Maven Central.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top