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.
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
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 target
via:
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.