مقدمة
في معالجة الأعمال ، تستخدم بعض الشركات أساليب غير متزامنة أكثر منطقية. على سبيل المثال ، في منطق عمل معين ، يتم تخزين بعض البيانات في ذاكرة التخزين المؤقت Redis. ذاكرة التخزين المؤقت هي مجرد وظيفة مساعدة. لن يكون للنجاح أو الفشل تأثير أساسي على العمل الرئيسي. يمكن تنفيذ هذه العملية من خلال طريقة غير متزامنة.
في الربيع ، يمكن استدعاء الطريقة بشكل غير متزامن عن طريق تعيين شرح ASYNC على الطريقة. وهذا يعني أن الطريقة ستعود فور الاحتجاج ، ويتم تسليم التنفيذ الفعلي لهذه الطريقة إلى Taskexecutor في الربيع لإكماله.
مثال رمز
المشروع هو مشروع ربيع عادي ، ملف تكوين الربيع:
<؟ xmlns: context = "http://www.springframework.org/schema/context" xmlns: task = "http://www.springframework.org/schema/task" http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"> <!-- Package Scan --> <context:component-scan base-package = "com.lzumetal.ssm"/> <!-مجموعة مؤشرات الترابط لتنفيذ المهام غير المتزامنة taskexecutor-> <task: executor id = "myexecutor" pool-size = "5"/> <task: executor executor = "myexecutor"/>//beans>
فئتان خدمة:
package com.lzumetal.ssm.anotation.service ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد org.springframework.beans.factory.annotation.autowired java.util.concurrent.executionException ؛ استيراد java.util.concurrent.future ؛/** * خدمة الأعمال */@servicepublic class classservice {private static final logger log = loggerfactory.getlogger (commansservice.class) ؛ @Autowired Cacheservice Cacheservice ؛ public void dobusiness () {log.error ("ابدأ في التعامل مع أعمالنا") ؛ cacheservice.cachedata () ؛ log.error ("Comlete Service Operation") ؛ } / *** احصل على قيمة الإرجاع لتنفيذ الطريقة غير المتزامنة* / public void dobusinesswithAsyNcreturn () يلقي ExecutionException ، InterruptedException {log.error ("ابدأ التعامل مع أعمالنا") ؛ المستقبل <string> المستقبل = cacheservice.cachedatawithReturn () ؛ log.error (future.get ()) ؛ //future.get () الطريقة عبارة عن سجل حظر ("عملية خدمة comlete") ؛ }} package com.lzumetal.ssm.anotation.service ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد org.springframework.scheduling.annotation.async org.springframework.stereotype.service ؛ استيراد java.util.concurrent.future ؛ استيراد java.util.concurrent.timeunit ؛/*** خدمة ذاكرة التخزين المؤقت*/@servicepublic classervice {private static final logger. async (value = "myexecutor") // حدد taskexecutor لتنفيذ المهمة العامة void cachedata () {try {timeUnit.seconds.sleep (3l) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } log.error ("Success Store النتيجة إلى ذاكرة التخزين المؤقت") ؛ } ASYNC Public Future <string> CacheDataWithReturn () {try {timeUnit.seconds.sleep (3l) ؛ } catch (interruptedException e) {E.PrintStackTrace () ؛ } log.error ("Success Store النتيجة إلى ذاكرة التخزين المؤقت") ؛ // يجب أن يتم لف النتيجة التي تم إرجاعها بواسطة فئة Asyncresult Retring New Asyncresult <> ("نجاح عملية Async") ؛ }}فئة الاختبار:
package com.lzumetal.ssm.anotation.test ؛ استيراد com.lzumetal.ssm.anotation.Service.BusinessService ؛ import org.junit.test ؛ eSport org.junit.runner.runwith ؛ import org.springframewewewewe. org.springframework.test.context.contextConfiguration ؛ استيراد org.springframework.test.context.junit4.springjunit4classrunner {"classpath: spring-context.xml"}) الفئة العامة maintest {Autowired BusinessService Service ؛ Test public void test () remrows interruptedException {businessService.dobusiness () ؛ // لا تدع الخيط الرئيسي ينتهي مبكرًا جدًا ، وإلا فلن ترى وحدة التحكم محتوى الإخراج في الطريقة غير المتزامنة TimeUnit.Seconds.Sleep (5L) ؛ } test public void testasyncreturn () يلقي الاستثناء {businessService.DobusinessWithAsyNcreturn () ؛ timeUnit.Seconds.sleep (5L) ؛ }}نتيجة تنفيذ طريقة الاختبار ():
22: 20: 33،207 معلومات الدعم الرئيسي. org.springframework.test.context.support.dirtiesContextBeforeModeSestExecutionListener ، org.springframewok org.springframework.test.context.transaction.transactionAttExecutionListener ، org.springframework.test.context.jdbc.sqlscriptStestExecotener]
22: 20: 33،226 Info Main Support.DefaultTestContextStstrapper: 209 - لم يستطع إنشاء TestexecutionListener [org.springframework.test.context.web.servlettestexecutionerener]. حدد فئات المستمع المخصصة أو اجعل فئات المستمع الافتراضية (وتبعياتها المطلوبة) متاحة. فئة مخالفة: [Javax/Servlet/servletContext]
22: 20: 33،227 معلومات الدعم الرئيسي. org.springframework.test.context.support.dependencyInjectionTestExecutionListener@643b1d11 ، org.springframework.test.context.support.dirtiesContextExecutionListener@2ef5e3 ، org.springframework.test.context.transaction.transactionAttExecutionListener@36d4b5c ، org.springframework.test.context.jdbc.sqlscriptSteSestExecotener@6d00a15d] 22: 33،324 info تعريفات حبة XML من مورد مسار الفئة [spring-context.xml]
22: 20: 33،585 معلومات الدعم الرئيسي. جذر التسلسل الهرمي للسياق
22: 20: 33،763 معلومات رئيسية متزامنة.
22: 20: 33،766 معلومات الدعم الرئيسي.
22: 20: 33،767 معلومات الدعم الرئيسي.
22: 20: 34،107 خطأ الخدمة الرئيسية.
22: 20: 34،113 خطأ الخدمة الرئيسية.
22: 20: 37،166 خطأ myexecutor -1 service.cacheservice: 28 - متجر النجاح النتيجة إلى ذاكرة التخزين المؤقت
22: 20: 39،117 Info thread -0 support.genericapplicationContext: 984 - إغلاق org.springframework.context.support.genericapplicationcontext@4f7d0008: تاريخ بدء التشغيل [Wed 30 May 30:20:33 CST 2018] ؛ جذر التسلسل الهرمي للسياق
22: 20: 39،118 Info thread -0 convers
نتيجة تنفيذ طريقة TestAsyncreturn ():
21: 38: 16،908 Info Main Support.DefaultTestContextBootStrapper: 260 - تم تحميل أسماء فئة TestExecutionlistener الافتراضية من الموقع [meta -inf/spring.factories]: org.springframework.test.context.support.dirtiesContextBeforeModeSestExecutionListener ، org.springframewok org.springframework.test.context.transaction.transactionAttExecutionListener ، org.springframework.test.context.jdbc.sqlscriptStestExecotener]
21: 38: 16،926 Info Main Support.DefaultTestContextStstrapper: 209 - لم يستطع إنشاء TestexecutionListener [org.springframework.test.context.web.servlettestexecutionerener]. حدد فئات المستمع المخصصة أو اجعل فئات المستمع الافتراضية (وتبعياتها المطلوبة) متاحة. فئة مخالفة: [Javax/Servlet/servletContext]
21: 38: 16،927 Info Main Support.DefaultTestContextBootStrapper: 187 - باستخدام TestExecutionListeners: [org.springframework.test.context.support.dirtiesContextBeorModeStExecutionlister@100fc185 ، org.springframework.test.context.support.dependencyInjectionTestExecutionListener@643b1d11 ، org.springframework.test.context.support.dirtiesContextExecutionListener@2ef5e3 ، org.springframework.test.context.transaction.transactionAttExecutionListener@36d4b5c ، org.springframework.test.context.jdbc.sqlscriptSteSexecotener@6d00a15d] 21: 17،025 info تعريفات حبة XML من مورد مسار الفئة [spring-context.xml]
21: 38: 17،263 معلومات الدعم الرئيسي. جذر التسلسل الهرمي للسياق
21: 38: 17،405 معلومات رئيسية متزامنة.
21: 38: 17،407 معلومات الدعم الرئيسي.
21: 38: 17،407 معلومات الدعم الرئيسي.
21: 38: 17،692 خطأ في الخدمة الرئيسية.
21: 38: 20،833 خطأ myexecutor -1 service.cacheservice: 39 - متجر النجاح النتيجة إلى ذاكرة التخزين المؤقت
21: 38: 20،834 خطأ الخدمة الرئيسية.
21: 38: 20،835 خطأ الخدمة الرئيسية.
21: 38: 25،838 Info thread -0 support.genericapplicationContext: 984 - إغلاق org.springframework.context.support.genericapplicationcontext@4f7d0008: تاريخ بدء التشغيل [الأربعاء 30 مايو 21:38:17 CST 2018] ؛ جذر التسلسل الهرمي للسياق
21: 38: 25،839 Info thread -0 Convers
@نقاط استخدام Async
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.