Spring을 사용하여 애플리케이션을 구축할 때 @EnableAsync 주석을 사용하여 비동기 실행을 활성화하고 @Async를 사용하는 것이 일반적입니다. 메소드를 통해 쉽게 비동기화할 수 있습니다.
@Async에는 기본적으로 두 가지 사용 규칙이 있습니다.
아래 예에서는 컴파일 문제가 없지만 메서드(@Async 주석이 지정되었음에도 불구하고)가 원하는 대로 실행되지 않습니다.
@Slf4j @Service @RequiredArgsConstructor public class HelloService { public String get() { log.info("Chegou!"); print(); return "Ola!"; } @Async @SneakyThrows public void print() { Thread.sleep(Duration.ofSeconds(5)); log.info("Burlado!"); } }
그리고 클래스의 책임이기 때문에 비동기적으로 실행되어야 하는 코드 블록이 클래스에 남아 있기를 바라는 것이 매우 일반적입니다. 어떻게 해결하나요?
간단해요!
도움이 되는 또 다른 클래스를 만들면 됩니다. 예를 들면 다음과 같습니다.
@Service public class AsyncService { @Async public void run(final Runnable runnable) { runnable.run(); } @Async public <O> O run(final Supplier<O> supplier) { return supplier.get(); } }
비동기 실행이 바람직한 이 Bean에 대해 종속성 주입을 수행하고, 게다가 메소드를 비공개로 만들 수 있습니다.
@Slf4j @Service @RequiredArgsConstructor public class HelloService { private final AsyncService asyncService; public String get() { log.info("Chegou!"); asyncService.run(this::print); return "Ola!"; } @SneakyThrows private void print() { Thread.sleep(Duration.ofSeconds(5)); log.info("Burlado!"); } }
이 작은 예는 제어 역전, 종속성 주입, SOLID, 디자인 패턴, 기능적 인터페이스 등 여러 개념과 리소스의 적용을 보여줍니다.
위 내용은 Burlando o @Async do Spring의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!