سؤال

أنا أستخدم قاعدة بيانات Apache Derby المضمنة لاختبار الوحدة في مشروع Maven.لسوء الحظ، عندما أقوم بإجراء الاختبار، ينتهي بي الأمر بـ derby.log الملف في جذر المشروع.يتم إنشاء قاعدة البيانات نفسها في target الدليل (jdbc:derby:target/unittest-db;create=true) لذلك هذه ليست مشكلة.بعد التشاور مع دليل مرجعي حاولت ضبط logDevice المعلمة على عنوان URL لـ JDBC (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

الائتمان لمن هو الواجب .

نصائح أخرى

وديربي يتيح لك تحديد اسم الملف الذي تتم كتابة رسائل سجل خطأ باستخدام الخاصية نظام جافا <لأ href = "http://db.apache.org/derby/docs/10.8/ref/rrefproper33027. أتش تي أم أل "يختلط =" noreferrer "> derby.stream.error.file . القيمة الافتراضية هي "derby.log".

لتخلص من 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

وعلى ويندوز)

لدمج الاختبارات الوضع قد يكون قليلا أكثر صعبة من مؤكدة النجاح الممتلكات. تحديد 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 كما هو الحال في الحل مؤكدة النجاح.

ويمكنك أيضا تعيين فقط دربي موطن لtarget/derby أو targetvia:

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

ومن ثم استخدام URL jdbc:derby:unittest-db;create=true JDBC. ثم يظهر 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-maven-plugin لإختباراتك؟فإنه يضع derby.log الملف تحت target/derby, ، وبالتالي عدم ترك أي فضلات.

كما هو موضح في جوابي هنا, ، يمكنك استخدام Derby كقاعدة بيانات خاصة بك عبر البرنامج المساعد derby-maven الذي كتبته وهو متاح على جيثب وعبر مافن سنترال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top