>  기사  >  Java  >  Springboot 비동기 작업 및 예약된 작업을 처리하는 방법

Springboot 비동기 작업 및 예약된 작업을 처리하는 방법

PHPz
PHPz앞으로
2023-05-25 20:05:121906검색

1 머리말

Springboot에서 비동기 작업과 예약 작업은 문제를 해결하는 방법으로 흔히 접하게 되는데, 이 두 가지 구성을 잘 활용하고 정상적인 업무를 방해하지 않으려면 다음과 같이 해야 합니다. 비동기 구성. 합리적인 비동기 처리 스레드를 설정하는 방법이 핵심이자 핵심입니다. Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步化配置。怎么设置合理的异步处理线程就是其核心和关键。

2 异步任务设置

在项目中使用异步任务是经常遇到的解决问题方式,通常是为减少请求的等待时间,将业务处理进行异步后台处理,可以改善用户的体验,增加系统的吞吐量。

在 springboot 中开启异步任务,也是十分的简单,只需要两步操作:

  • 1 开启 @EnableAsync 注解。

  • 2 在需要异步处理的方法上添加 @Async

需要说明的是异步执行的方法可以有返回值,但是必须是 Future,这里和多线程 submit 的方式提交任务,获取处理结果的方式。

到此为止,异步任务的配置和使用就结束了。异步任务使用的也是多线程线程池技术,默认情况下采用的是 SimpleAsyncTaskExecutor 来实现,但是自己的命运怎么能交到他人手上呢,总觉得不太踏实,异步任务怎么才能使用自定义的线程池去实现呢,这是一个好问题,答案也是有的,那就是 AsyncConfigurer。这是一个接口,需要实现 getAsyncExecutor 方法来获取一个线程池,如果需要异常信息的抓取,则在实现一个方法 getAsyncUncaughtExceptionHandler 即可。

具体的代码如下所示:

Springboot 비동기 작업 및 예약된 작업을 처리하는 방법

异步任务执行结果如下,可以说明异步任务的线程池配置已经生效:

Springboot 비동기 작업 및 예약된 작업을 처리하는 방법

3 定时任务配置

定时任务在项目开发中可以说是很常用的配置,作为业务功能的补偿而存在,有这举足轻重的地位,对于定时任务的使用,可以分为固定时间和 crontab 表达式,在实现的工具上,有 spring 自带的 @Schedule,在单体项目中应用广泛,不需要借助其它的平台和额外的配置,对于简单的任务来说已经足够,但是对于分布式系统来说,就有点儿力不从心了,这时就诞生了 quartz、 elastic-job 和 xxl-job 等,其中 xxl-job 尤为出色。在这里,只介绍一下 @Schedule 的使用:

  • 1 全局开启 @EnableScheduling 注解。

  • 2 在需要执行的任务上添加 @Schedule 注解,并指定执行方法,是固定执行还是采用 cron 表达式。

在实际的项目开发中,crontab 表达式应用还是很广泛的:

Springboot 비동기 작업 및 예약된 작업을 처리하는 방법

和异步任务执行一样,定时任务的执行也是有自己的异步任务线程池,这里需要实现的接口为 SchedulingConfigurer ,实现其 configureTasks

2 비동기 작업 설정

Springboot 비동기 작업 및 예약된 작업을 처리하는 방법프로젝트에서 비동기 작업을 사용하는 것은 문제를 해결하기 위해 자주 접하는 방법입니다. 이는 일반적으로 요청 대기 시간을 줄이고 비즈니스 처리의 비동기 백그라운드 처리를 수행하여 사용자 경험을 향상하고 효율성을 높일 수 있습니다. 시스템의 처리량.

springboot에서 비동기 작업을 여는 것도 매우 간단합니다. 두 단계만 필요합니다.

  • 1 @ 열기 EnableAsync 주석. Springboot 비동기 작업 및 예약된 작업을 처리하는 방법

  • 2 비동기 처리가 필요한 메소드에 @Async를 추가하세요. 🎜
🎜비동기 실행 메서드는 반환 값을 가질 수 있지만 Future여야 합니다. 이는 다중 스레드 와 동일한 방식으로 제출됩니다. 제출 작업, 처리 결과를 얻는 방법. 🎜🎜이제 비동기 작업 구성 및 사용이 끝났습니다. 비동기 작업도 멀티스레드 스레드 풀 기술을 사용하여 이를 구현하는데 기본적으로 SimpleAsyncTaskExecutor가 사용됩니다. 그런데 어떻게 자신의 운명이 다른 사람의 손에 맡겨질 수 있겠습니까? 실용적입니다. 비동기 작업은 어떻습니까? 사용자 정의 스레드 풀을 사용하여 구현할 수 있습니까? 이것은 좋은 질문이며 이에 대한 답이 있습니다. 바로 AsyncConfigurer입니다. 이는 스레드 풀을 얻기 위해 getAsyncExecutor 메서드를 구현해야 하는 인터페이스입니다. 예외 정보를 캡처해야 하는 경우 getAsyncUncaughtExceptionHandler 메서드를 구현하세요. 🎜🎜🎜구체적인 코드는 다음과 같습니다: 🎜🎜🎜Springboot 비동기 작업 및 타이밍 작업 처리 방법🎜🎜🎜비동기 작업 실행 결과는 다음과 같으며, 이는 비동기 작업의 스레드 풀 구성이 적용되었음을 나타냅니다. 🎜🎜🎜Springboot 비동기 작업 및 예약 작업 처리 방법🎜🎜3 예약 작업 구성🎜🎜 예약 작업은 매우 일반적이라고 할 수 있습니다 프로젝트 개발에서 사용되는 구성은 비즈니스 기능 존재에 대한 보상으로 이러한 중추적 위치를 가지고 있습니다. 예약된 작업의 사용은 고정 시간과 crontab 표현식으로 나눌 수 있습니다. code>spring 고유의 @Schedule은 단일 프로젝트에서 널리 사용되며 다른 플랫폼의 도움이나 추가 구성이 필요하지 않으며 간단한 작업에는 충분하지만 분산 시스템에는 충분합니다. , 좀 부족하네요. 그러다가 quartz, elastic-job, xxl-job이 탄생했는데, 그중 xxl-job이 특히 돋보였습니다. 여기서는 @Schedule 사용에 대해서만 소개하겠습니다. 🎜
  • 🎜1 @EnableScheduling 주석을 전역적으로 활성화합니다. . 🎜
  • 🎜2 실행해야 하는 작업에 @Schedule 주석을 추가하고, 고정 실행인지 cron를 사용하여 실행 방법을 지정합니다. > 표현. 🎜
🎜실제 프로젝트 개발에서는 crontab 표현식이 여전히 널리 사용됩니다. 🎜🎜Springboot 비동기 작업 및 예약된 작업을 처리하는 방법🎜🎜비동기 작업 실행과 유사하게 예약 작업 실행에도 자체 비동기 작업 스레드 풀이 있습니다. 구현해야 하는 인터페이스는 SchedulingConfigurer이며 해당 configureTasks 메서드를 구현할 수 있습니다. 🎜🎜🎜🎜🎜🎜모든 구성 파일이 완료된 후 다음을 볼 수 있습니다. 실행 후 예약된 작업 스레드 풀 구성이 적용되었습니다: 🎜🎜🎜🎜🎜

위 내용은 Springboot 비동기 작업 및 예약된 작업을 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제