Mavenプロジェクトの単体テストにApacheDerby組み込みデータベースを使用しています。残念ながら、テストを実行するたびにderby.log
プロジェクトのルートにあるファイル。データベース自体はtarget
ディレクトリ(jdbc:derby:target/unittest-db;create=true
)それは問題ではありません。 リファレンスガイド を参照した後、JDBCURLにlogDevice
パラメータを設定してみました(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システムプロパティ derby.stream.error.file
を使用して、エラーログメッセージが書き込まれるファイルの名前を指定できます。デフォルト値は 'derbyです。 。ログ'。
Mavenのsurefireテストフェーズでderby.log
を取り除くには、次のようにプラグイン構成にプロパティ定義を追加するだけです。
<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の場合)
統合テストの場合、状況は単純な surefire プロパティよりも少し難しいかもしれません。サーバー環境はそのプラグインを継承しないため、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>
何らかの理由で、surefireソリューションのようにsystemProperty
だけでなく、property
を使用することに注意してください。
ダービーホームをtarget/derby
またはtarget
viaに設定することもできます。
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パスを変更し、プロパティファイルの下にあるプロパティの1つに設定したことです。以下のコードを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-maven-plugin を使用してみませんか? derby.log
ファイルをtarget/derby
の下に配置するため、ゴミが残りません。
ここでの私の答え で説明されているように、私が作成したderby-maven-pluginを介してデータベースとしてDerbyを使用でき、 GitHub およびMavenCentralから入手できます。