1. выполнение задачи и планирование
Spring использует интерфейсы Taskexecutor и Taskscheduler, чтобы обеспечить абстракции для асинхронных задач выполнения и планирования.
Spring's Taskexecutor такой же, как и интерфейс java.util.concurrent.executor. Этот интерфейс имеет только один метод выполнения (выполняемая задача).
1.1. Taskexecutor Type
Spring имеет встроенные встроенные реализации Taskexecutor, и вам не нужно их самостоятельно:
1.2. Аннотация поддержки планирования и асинхронного исполнения
Чтобы обеспечить поддержку @scheduled и @async Annotations добавить @enablescheduling и @enableasync в один из ваших
@Configuration classes:@configuration@enableasync@enableschedulingpublic class appconfig {}Обратите особое внимание
Режим консультаций по умолчанию для обработки @Async Annotations - это «прокси», который позволяет помешать вызовам только через прокси; Местные звонки в одном и том же классе не могут быть перехвачены таким образом. Для более совершенного режима помех рассмотрите возможность переключения в режим «аспект» в сочетании с временем компиляции или сваркой времени нагрузки.
По умолчанию @Async обращается с прокси. Следовательно, методы в одном классе не могут быть асинхронно называемыми методами с @Async, и эта ситуация все еще синхронна.
Например: следующее, вызов sayshi () непосредственно можно выполнить асинхронно, в то время как Showmihi () все еще выполняется синхронно при вызове Sayshello ()
открытый класс A {public void sayshello () {sayhi (); } @Async public void sayshi () {}}1.3. @Async Annotation
Добавление @Async Annotation к методу означает, что это асинхронный вызов. Другими словами, абонент метода немедленно получит возврат, а фактическое выполнение метода - отправить задачу в Taskexecutor Spring.
Другими словами, абонент вернется сразу после вызова, и фактическое выполнение метода произойдет в задаче, которая была представлена в весенний Taskexecutor.
@Asyncvoid dosomething () {// Это будет выполнено асинхронно} @Asyncvoid dosomething (String s) {// Это будет выполнено асинхронно} @Asyncfuture <string> returnsomething (int i) {// Это будет выполнено асинхронно}Уведомление:
@Async Методы могут не только объявлять обычный java.util.concurrent.future возвращаемого типа, но и Spring's org.springframework.util.concurrent.listenablefuture или, как и в Spring 4.2, JDK 8 Java.Util.Concurrent.completableFuture: для взаимодействия с более высокой задачей и на непосредственную задачу.
1.4. @Async Limited Исполнитель
По умолчанию, когда аннотация @Async добавлена в метод, будет использоваться исполнитель, который поддерживает драйвер аннотации. Тем не менее, значение значения аннотации @Async может указать дополнительный исполнитель
@Async ("OtherexeCutor") void dosomething (String S) {// Это будет выполнено асинхронно "otherexeCutor"}Здесь OtherexeCutor - это имя любого исполнителя бобов в весеннем контейнере.
1.5. @Async Exception Management
Когда метод @Async имеет возвращаемое значение будущего типа, легко управлять исключением при наборе метода Future's (), чтобы получить результат выполнения задачи. Если тип возврата недействителен, то исключение не будет пойман.
Общедоступный класс myasyncuncaughtexceptionhandler реализует AsyncuncaughtexceptionHandler {@Override public void harderuncaughtexception (Throwable Ex, метод метода, объект ... Params) {// Обработка исключения}}}}}}}}}}}}}} 2. Конфигурация пула потоков
Import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.scheduling.antation.enableasync; import org.springframework.scheduling.concurrent.ThreadeSpultAsculorSculorSculorSculorScur Taskexecutorconfig {private integer corepoolsize = 30; частное целое число maxpoolsize = 50; Частные целочисленные целочисленные Quealiveseconds = 300; // Частная целочисленная Queeecapacity = 2000; @Bean ("mythreadpooltaskexecutor") public threadpooltaskexecutor mythreadpooltaskexecutor () {threadpooltaskexecutor executor = new ThreadpooltaskexeCutor (); Исполнитель.setCorePoolsize (corePoolsize); Исполнитель.setMaxPoolsize (maxPoolsize); Исполнитель.seteckebealiveseconds (oreamaliveseconds); // Исполнитель.setqueueCapacity (QueueCapacity); Исполнитель.setWaitFortAskStoCOmpleteeOnShutdown (true); Исполнитель.initialize (); вернуть исполнитель; }} Вызов
@Async ("mythreadpooltaskexecutor") @override public void present (couponpresentlogentity entity) {try {couponbaseresponse rst = couponsendrpcservice.send (entity.getUserid (), Entity.getCouponBatchkey (), "1", Entity.GetDorId ();); if (null! = rst && rst.issuccess ()) {entity.setStatus (presentstatusEnum.success.getType ()); } else {string consure = (null == rst)? «Исключение ответа»: rst.getMsg (); Entity.SetFailUreREESON (разум); Entity.SetStatus (presentStatusEnum.failure.getType ()); }} catch (Exception ex) {log.error (ex.getMessage (), ex); Entity.SetFailUreRease Season (ex.getMessage ()); Entity.SetStatus (presentStatusEnum.failure.getType ()); } couponpresentlogdao.update (Entity); }результат
[Информация] 2018-05-09 16: 27: 39.887 [Mythreadpooltaskexecutor-1] [com.ourhours.coupon.rpc.dubbo.receivelogfilter]-Получить метод имени: Отправить; Аргументы: [10046031, "4D7CC32F8F7E4B00BCA56F6BF4B3B658", "1", 10001]
[Информация] 2018-05-09 16: 27: 39.889 [Mythreadpooltaskexecutor-2] [com.ourhours.coupon.rpc.dubbo.receivelogfilter]-Получить метод-имени: Отправить; Аргументы: [10046031, "4D7CC32F8F7E4B00BCA56F6BF4B3B658", "1", 10001]
См.
Справочная документация Spring Framework 4.3.17.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.