JavaRush /Kurslar /All lectures for UZ purposes /Rejalashtirish va vazifalarni bajarish

Rejalashtirish va vazifalarni bajarish

All lectures for UZ purposes
Daraja, Dars
Mavjud

Agar kontekstda Executor bo'lmasa, Spring Boot avtomatik ravishda ThreadPoolTaskExecutor'ni default qiymatlar bilan sozlaydi, ular asinxron vazifalarni bajarishga (@EnableAsync annotatsiyasi) va Spring MVC'da asinxron so'rovlarni bajarishga avtomatik bog'lanishi mumkin.

Agar siz kontekstda custom Executor aniqlagan bo'lsangiz, oddiy vazifalarni bajarishda (ya'ni @EnableAsync annotatsiyasi bilan) u shaffof tarzda ishlatiladi, lekin Spring MVC qo'llab-quvvatlash vositalari sozlanmaydi, chunki bu uchun AsyncTaskExecutor'ning applicationTaskExecutor nomli implementatsiyasi kerak bo'ladi. Maqsadli tashkilotingizga qarab, Executor'ni ThreadPoolTaskExecutor'ga o'zgartirishingiz yoki custom Executor'ni o'rab olish uchun ThreadPoolTaskExecutor va AsyncConfigurer aniqlashingiz mumkin.

Autokonfiguratsiya qilinadigan TaskExecutorBuilder kerakli instance yaratishni osonlashtiradi, bu autokonfiguratsiya odatda nima qilsa shuni takrorlaydi.

Thread pool 8 ta asosiy threadlardan foydalanadi, ularning soni yuklamaga qarab ortishi yoki kamayishi mumkin. Bu default parametrlarni spring.task.execution namespace yordamida aniqroq sozlash mumkin, quyidagi misolda ko'rsatilgandek:

Properties
spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s
Yaml
spring:
  task:
    execution:
      pool:
        max-size: 16
        queue-capacity: 100
        keep-alive: "10s"

Bu kod thread pool'ni uzunlik bilan chegaralangan navbatdan foydalanish uchun o'zgartiradi, shuning uchun agar navbat to'lsa (100ta vazifa), thread pool maksimal 16 ta threadga oshadi. Pool'ni qisqartirish yanada tajovuzkorroq bo'ladi, chunki ularning ishlamaydigan vaqti 10 soniyani tashkil etsa (default bo'yicha 60 soniya emas) thread'lar qayta ishlanadi.

ThreadPoolTaskScheduler ham rejalashtirilgan vazifalarni bajarish bilan bog'lanishi kerak bo'lsa (masalan @EnableScheduling annotatsiyasi bilan) avtomatik sozlanishi mumkin. Default thread pool bir ta threaddan foydalanadi, lekin uning parametrlarini spring.task.scheduling namespace yordamida aniqroq sozlash mumkin, quyidagi misolda ko'rsatilgandek:

Properties
spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2
Yaml
spring:
  task:
    scheduling:
      thread-name-prefix: "scheduling-"
      pool:
        size: 2

TaskExecutorBuilder va TaskSchedulerBuilder kontekstda mavjud, agar custom executor yoki scheduler yaratish kerak bo'lsa.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION