سيسألني العديد من مستخدمي الإنترنت من وقت لآخر ، وكيفية اختبار مشروع Boot Spring ، وكيفية نشره ، وما إذا كان هناك أي حلول نشر جيدة في الإنتاج؟ ستقدم هذه المقالة كيفية تطوير SPRING BOOT وتصحيحها وتعبئتها وأخيراً وضع الإنتاج والإطلاق.
مرحلة التنمية
اختبار الوحدة
أهم شيء خلال مرحلة التطوير هو اختبار الوحدة. تم استدعاء دعم Springboot لاختبار الوحدة.
1. أضف مرجع حزمة الاختبار الربيعي إلى حزمة POM
<Rependency> <roupeD> org.springframework.boot </rougiD> <intifactid> Spring-boot-starter-test </stiftiD>
2. التنمية والاختبار
مع أخذ أبسط من HelloWorld كمثال ، تحتاج إلى إضافة: Runwith (SpringRunner.class) و SpringBoottest التعليقات التوضيحية لرئيس الفصل في فئة الاختبار. فقط أضف Test في الجزء العلوي من طريقة الاختبار ، وأخيراً انقر بزر الماوس الأيمن على طريقة التشغيل.
Runwith (SpringRunner.Class) springBoottestpublic Class ApplicationTests {test public void hello () {system.out.println ("Hello World") ؛ }}في الاستخدام الفعلي ، يمكنك حقن رمز طبقة DAO أو رمز طبقة الخدمة وفقًا للاستخدام العادي للمشروع للاختبار والتحقق. يوفر الاختبار الربيعي الذي يمتد إلى عدد كبير من الاستخدامات الأساسية ، وما هو أكثر ندرة هو أنه يضيف دعمًا لاختبار طبقة التحكم.
// تحقق بشكل واضح مما إذا كانت مجموعة النتائج صحيحة. assertequals (3 ، usermapper.getAll (). size ()) ؛ // تحقق من مجموعة النتائج ، orterform. Assert.AssertFalse ("خطأ ، قيمة الإرجاع الصحيحة هي 200" ، الحالة! = 200) ؛يتم تقديم MOCKMVC لدعم اختبار طبقة وحدة التحكم. المثال البسيط هو كما يلي:
الطبقة العامة hellocontrolertests {private mockmvc mvc ؛ . }. . } // تحقق من ما إذا كانت وحدة التحكم تستجيب بشكل طبيعي وتحدد ما إذا كانت نتيجة الإرجاع صحيحة في اختبار testHello () testhello () {mvc.perform (mockmvcrequestbuilders.get ("/hello"). .andexpect (content (). string (equalto ("Hello"). قبول (mediaType.Application_json)).اختبار الوحدة هو الحاجز الأول للتحقق من الكود الخاص بك. يجب عليك تطوير عادة اختبار الوحدة في كل مرة تكتب فيها جزءًا من الكود الخاص بك. لا تنتظر حتى يتم دمجها جميعًا قبل الاختبار. بعد التكامل ، من السهل تفويت الحشرات في أسفل الكود لأنك تولي المزيد من الاهتمام لتأثير التشغيل الكلي.
اختبار التكامل
بعد الانتهاء من التطوير الكلي ، يتم إدخال اختبار التكامل. يوجد مدخل بدء تشغيل مشروع SPRING BOOT في فئة التطبيق. يمكنك بدء المشروع عن طريق تشغيل طريقة التشغيل مباشرة. ومع ذلك ، أثناء عملية تصحيح الأخطاء ، يجب علينا باستمرار تصحيح الرمز. إذا كنت بحاجة إلى إعادة تشغيل الخدمة يدويًا في كل مرة يتم فيها تعديل الكود ، فسيكون ذلك مزعجًا للغاية. يوفر Spring Boot دعم النشر الساخن بشكل كبير ، وهو مريح للغاية لتصحيح الأخطاء والاستخدام في مشاريع الويب.
يحتاج POM إلى إضافة التكوين التالي:
<Rependencies> <Rependency> <roupiD> org.springframework.boot </groupId> <StifactId> spring-boot-devtools </stifactid> <اختياري> صحيح </اختياري> </rependency> </repreadencies> <StifactId> Spring-Boot-Maven-Plugin </stifactid> <foction> <tork> True </fork> </isplicuration> </spliexin> </plugins> </build>
بعد إضافة التكوين أعلاه ، يدعم المشروع النشر الساخن ، وهو مريح للغاية لاختبار التكامل.
الذهاب إلى الإنتاج والإنترنت
في الواقع ، أعتقد أن هذه المرحلة يجب أن تكون بسيطة نسبيًا وتقسيمها بشكل عام إلى نوعين: أحدهما هو حزمها في حزمة جرة وتنفيذها مباشرة ، والآخر هو حزمها في حزمة الحرب ووضعها تحت خادم Tomcat.
اصنعها في حزمة جرة
إذا كنت تستخدم Maven لإدارة مشروعك ، فقم بتنفيذ الأمر التالي
Project Project and Directory (نفس المستوى مثل pom.xml) MVN Clean Package ## أو قم بتنفيذ الأمر التالي ## لاستبعاد رمز الاختبار وحزمة MVN Clean Package -dmaven.test.skip = true
بعد اكتمال التغليف ، سيتم إنشاء حزمة JAR في الدليل المستهدف. الاسم هو عادة اسم المشروع + رقم الإصدار. jar
ابدأ أمر حزمة JAR
Java -jar Target/Spring-Boot-Scheduler-1.0.0.jar
وبهذه الطريقة ، طالما تم إغلاق وحدة التحكم ، لن تكون الخدمة متاحة. لنبدأ ما يلي عن طريق التشغيل في الخلفية:
Nohup Java -jar Target/Spring-Boot-Scheduler -1.0.0.jar &
يمكنك أيضًا اختيار قراءة ملفات التكوين المختلفة عند البدء
java -jar app.jar -spring.profiles.active = dev
يمكنك أيضًا تعيين معلمات JVM عند بدء التشغيل
java -xms10m -xmx80m -jar app.jar & gradle
إذا كنت تستخدم Gradle ، فاستخدم الأمر التالي إلى الحزمة
Gradle Buildjava -jar Build/libs/mymodule-0.0.1-snapshot.jar
اصنعها في حقيبة حرب
يمكن استخدام النوع الأول لتصدير حزمة الحرب من خلال أداة التطوير Eclipse ، والنوع الآخر هو استخدام الأوامر لإكمالها. هنا نقدم أساسا هذا الأخير.
1. مشروع Maven ، قم بتعديل حزمة POM
سوف
<لتغليف> جرة </packaging>
التغيير إلى
<packaging> الحرب </packaging>
2. استبعاد tomcat عند التغليف.
<Rependency> <roupeD> org.springframework.boot </rougiD> <artifactid> Spring-Boot-Starter-Web </shintifactid> </sophency> <sependency> <rougid> org.springframework.boot </roucidid> <scope> المقدمة </scope> </premency>
هنا ، قم بتعيين خاصية SCOPE على المقدمة بحيث لن يتم تضمين حزمة JAR في الحرب النهائية ، لأن خوادم مثل Tomcat أو Jetty ستوفر فصول API ذات الصلة في وقت التشغيل.
3. سجل فئة بدء التشغيل
إنشاء servletinitializer.java ، وراثة springbootservletinitializer ، وتجاوز التكوين () ، وتسجيل تطبيق فئة بدء التشغيل. عندما يقوم خادم تطبيق الويب الخارجي بإنشاء سياق تطبيق ويب ، ستتم إضافة فئة بدء التشغيل.
يمتد servletinitializer من الدرجة العامة springbootservletinitializer {Override محمية springapplicationbuilder تكوين (تطبيق springapplicationBuilder) {return application.sources (application.class) ؛ }}التنفيذ النهائي
MVN Clean Package -Dmaven.test.skip = True
سيتم إنشاء ملف اسم المشروع + رقم الإصدار.
Gradle
إذا كنت تستخدم Gradle ، فإن الخطوة الأساسية هي نفسها. أضف دعم الحرب في build.gradle واستبعاد الربيع-Starter-Tomcat:
... تطبيق البرنامج المساعد: 'WAR' ... التبعيات {compile ("org.springframework.boot: spring-boot-starter-web: 1.4.2.release") {explude mymodule: "spring-boot-starter-tomcat"}}}}}استخدم أمر الإنشاء مرة أخرى
بنية Gradle
سيتم إنشاء الحرب في دليل البناء/libs.
تشغيل وصيانة الإنتاج
عرض قيمة معلمات JVM
يمكنك متابعة أمر Jinfo الذي يأتي مع Java:
jinfo -flags pid
دعونا نرى ما الذي يتم استخدام GC بعد بدء الجرة ، وكم الذاكرة في دفعات في الجيل الجديد والمسنين. الأمثلة على النحو التالي:
-xx: cicompilercount = 3 -xx: initialheapsize = 234881024 -xx: maxheapsize = 3743416320 -xx: maxNewSize = 1247805440 -xx: minheapdeltabytes = 524288 -xx: -xx:+usecressedclasspointers -xx:+usecrugressed -xx:+uSfastunorderDimestamps -xx:+useparallegc -xx: cicompilercount: maximum maximum parallel the -xx: initialheapsize and -xx: maxhearsize: precified plicveman maximum healp of the maxtiz. الحجم المخصص للجيل الجديد من الذاكرة في منطقة كومة JVM ... -xx:+ustparalledgc: مجموعة القمامة تستخدم جامعًا متوازيًا
كيفية إعادة التشغيل
بسيطة وخام
اقتل العملية مباشرة وابدأ حزمة الجرة مرة أخرى
ps -ef | grep java ## احصل على pidkill for java program -9 pid ## إعادة تشغيل Java مرة أخرى -jar xxxx.jar
بالطبع ، هذه الطريقة أكثر تقليدية وعنيفة ، لذلك يوصى باستخدام الطريقة التالية لإدارتها
تنفيذ البرنامج النصي
إذا كنت تستخدم Maven ، فأنت بحاجة إلى تضمين التكوين التالي
<Plugin> <roupiD> org.springframework.boot </rougiD> <ArtifactId> Spring-Boot-Maven-Plugin </stifactid> <fignituration> <evelopmable> true </evelopmable> </iscification> </sultwin>
إذا كنت تستخدم Gradle ، فأنت بحاجة إلى تضمين التكوين التالي
Springboot {execute = true}طريقة بدء التشغيل:
1. يمكنك البدء مباشرة في ./yourapp.jar
2. سجل كخدمة
يمكنك أيضًا إنشاء رابط ناعم للإشارة إلى حزمة الجرة الخاصة بك وإضافته إلى init.d ، ثم ابدأه بالأوامر.
init.d مثال:
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourappchmod +x /etc/init.d/yourapp
وبهذه الطريقة يمكنك استخدام أمر STOP أو إعادة التشغيل لإدارة التطبيق الخاص بك.
/etc/init.d/yourapp البدء | توقف | إعادة التشغيل
أو
خدمة yourapp البدء | توقف | إعادة التشغيل
في هذه المرحلة ، تم تقديم الاختبار والتنسيق المشترك وتغليف مشاريع Springboot. يمكنك العثور على الوقت لدراسة التشغيل الآلي وصيانة Springboot ومجموعة من Springboot و Docker.
نموذج الرمز - جيثب
عينة من السحابة رمز الرمز
لخص
ما سبق هو طريقة عبوة اختبار التمهيد الربيعي التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!