1. تنفيذ المهام والجدولة
يستخدم Spring واجهات Taskexecutor و askscheduler لتوفير تجريدات لمهام التنفيذ والجدولة غير المتزامنة.
Spring's Taskexecutor هو نفس واجهة java.util.concurrent.executor. تحتوي هذه الواجهة على طريقة واحدة فقط (مهمة قابلة للتشغيل).
1.1. نوع taskexecutor
لقد قام Spring بتضمين العديد من تطبيقات Taskexecutor ، ولا تحتاج إلى تنفيذها بنفسك:
1.2. دعم التعليقات التوضيحية الجدولة والتنفيذ غير المتزامن
لتمكين دعم @scheduled و @async endations إضافة enablescheduling و enableAsync إلى واحد من الخاص بك
CRINFIGIRARINT فئات:@configuration@enableAsync@enblesChedulingPublic Class AppConfig {}إيلاء اهتمام خاص
وضع المشورة الافتراضي لمعالجة التعليقات التوضيحية ASYNC هو "وكيل" يسمح بتداخل المكالمات من خلال الوكيل فقط ؛ لا يمكن اعتراض المكالمات المحلية داخل نفس الفصل بهذه الطريقة. للحصول على وضع أكثر تقدماً للتداخل ، فكر في التبديل إلى وضع "SideJJ" بالاشتراك مع لحام وقت التجميع أو لحام وقت التحميل.
بشكل افتراضي ، يتم التعامل مع ASYNC مع الوكيل. لذلك ، لا يمكن أن تسمى الأساليب في نفس الفصل بشكل غير متزامن مع ASYNC ، وهذا الموقف لا يزال متزامنًا.
على سبيل المثال: ما يلي ، يمكن تنفيذ الاتصال Sealhi () خارجيًا مباشرة بشكل غير متزامن ، بينما لا يزال يتم تنفيذ Sayshi () بشكل متزامن عند الاتصال بـ Sealhello ()
الفئة العامة A {public void sayhello () {sayhi () ؛ } async public void sayhi () {}}1.3. async التعليق التوضيحي
إن إضافة توضيح ASYNC إلى الطريقة يعني أن هذه مكالمة غير متزامنة. بمعنى آخر ، سيحصل المتصل على الطريقة على الإرجاع على الفور ، وتنفيذ الطريقة الفعلية هو إرسال مهمة في Taskexecutor في Spring.
بمعنى آخر ، سيعود المتصل فور الاحتجاج وسيحدث التنفيذ الفعلي للطريقة في مهمة تم تقديمها إلى Taskexecutor الربيعي.
asyncvoid dosomething () {// سيتم تنفيذ هذا بشكل غير متزامن} asyncvoid dosomething (سلسلة S) {// سيتم تنفيذ هذا بشكل غير متزامن} asyncfuture <string> returnsomething (int i) {// سيتم تنفيذ هذا بشكل غير متزامن}يلاحظ:
قد لا تعلن أساليب ASYNC عن نوع java.util.util.concurrent.future أيضًا ولكن أيضًا في فصل الربيع org.springframework.util.concurrent.listenablefuture أو ، اعتبارًا من ربيع 4.2 ، يتجمع java.util.concurrent.completable.
1.4. async محدودة المنفذ
بشكل افتراضي ، عند إضافة التعليق التوضيحي ASYNC إلى الطريقة ، سيتم استخدام منفذي يدعم برنامج تشغيل التعليقات التوضيحية. ومع ذلك ، يمكن أن تحدد قيمة قيمة التعليق التوضيحي ASYNC
async ("oteRexecutor") void dosomething (سلسلة S) {// سيتم تنفيذ هذا بشكل غير متزامن بواسطة "otherexecutor"}هنا ، OTEREXECUTOR هو اسم أي فول منفذ في حاوية الربيع.
1.5. async الإدارة الاستثناء
عندما يكون طريقة ASYNC قيمة إرجاع من النوع المستقبلي ، فمن السهل إدارة الاستثناء الذي تم إلقاؤه عند كتابة طريقة GET () في المستقبل للحصول على نتيجة تنفيذ المهمة. إذا كان نوع الإرجاع باطلاً ، فلن يتم القبض على الاستثناء.
الطبقة العامة myasyncuncaughtexceptionHandler تنفذ asyncuncaughtexectionHandler {Override public void GeneorUncaughtexception (throwable ex ، method method ، object ... params) {// handled inscipe}}} 2. تكوين تجمع الخيوط
استيراد org.springframework.context.annotation.bean ؛ استيراد org.springframework.context.annotation. org.springframework.scheduling.concurrent.threadpooltaskexecutor ؛@configuration@enableAsyncpublic class taskexecutorconfig {private integer corepoolsize = 30 ؛ عدد صحيح خاص maxpoolsize = 50 ؛ عدد صحيح خاص keepaliveseconds = 300 ؛ // queueCapacity QueUegacity = 2000 ؛ bean ("MyThreadPoolTaskexecutor") public pooltaskexecutor mythreadpooltaskexecutor () {threadpooltaskexecutor evelopor = new threadpooltaskexecutor () ؛ Executor.setCorePoolSize (CorePoolSize) ؛ Executor.setMaxPoolsize (maxpoolsize) ؛ Executor.SetKeepalivesEconds (KeepAliveseconds) ؛ // executor.setqueUeCapacity (QueUeCapacity) ؛ Executor.setWaitFortaskStocpleteOnshutdown (True) ؛ Executor.Initialize () ؛ إرجاع المنفذ ؛ }} يتصل
async ("MyThreadPooltAskexecutor") Override public void الحاضر (CouponPresentLogentity Entity) {try {couponbaseresponse rst = couponsendrpcservice.send (estity.getuserid () ، entity.getCouponBatchkey () ، if (null! = rst && rst.issuccess ()) {entity.setStatus (presentStatusenum.success.gettype ()) ؛ } آخر {string asser = (null == rst)؟ "استثناء الاستجابة": rst.getmsg () ؛ entity.setFailurerearn (easure) ؛ entity.setStatus (presentStatusenum.Failure.getType ()) ؛ }} catch (استثناء ex) {log.error (ex.getMessage () ، ex) ؛ entity.setFailurerSons (ex.getMessage ()) ؛ entity.setStatus (presentStatusenum.Failure.getType ()) ؛ } couponpresentlogdao.update (الكيان) ؛ }نتيجة
[INFO] 2018-05-09 16: 27: 39.887 [MyThreadPooltaskexecutor-1] [com.ourhours.coupon.rpc.dubbo.receivelogfilter]-استلام الطريقة: إرسال ؛ الحجج: [10046031 ، "4D7CC32F8F7E4B00BCA56F6BF4B3B658" ، "1" ، 10001]
[INFO] 2018-05-09 16: 27: 39.889 [MyThreadPooltaskexecutor-2] [com.ourhours.coupon.rpc.dubbo.receivelogfilter]-استلام الطريقة: إرسال ؛ الحجج: [10046031 ، "4D7CC32F8F7E4B00BCA56F6BF4B3B658" ، "1" ، 10001]
الرجوع إلى:
الوثائق المرجعية الإطار الربيعي 4.3.17.REASE
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.