springboot 에서 @ Async 에 유사 한 트 랜 잭 션 주석 이 적용 되 지 않 는 문제 가 발생 할 수 있 습 니까?

8738 단어 sprintbootspringboot
springboot 에서 @ Async 에 유사 한 트 랜 잭 션 주석 이 적용 되 지 않 는 문제 가 발생 할 수 있 습 니까?
트 랜 잭 션 주 해 는 일반적으로 호출 과 관련 이 없습니다. 예 를 들 어 다음 과 같은 상황 에서 this 호출 로 컬 에 트 랜 잭 션 주 해 를 추가 하 는 방법 을 사용 하면 이러한 상황 은 무효 입 니 다.
@Service
class A {
     
    public void testB() {
     
        this.testC();
    }
    @Transactional
    public void testC() {
     

    }
}

그럼 문제 가 생 겼 습 니 다. @ Async 주해 도 주해 가 유효 하지 않 습 니까?
테스트 코드 는 다음 과 같 습 니 다:
@Controller
@RequestMapping("/test")
public class Testpush {
     
    @Autowired
    private AsynService asynService;

    @Autowired
    private ApplicationContext appContext;

    @PostMapping("/asyn")
    @ResponseBody
    public String testAsyn(@RequestBody String a) {
     

        System.out.println(Thread.currentThread().getName());
        System.out.println();

        long start = System.currentTimeMillis();
        asynService.testAsyn();
        System.out.println("  :" + (System.currentTimeMillis() - start));
        return "  !";
    }
}

@Service
interface AsynService {
     
    void testAsyn();

    void syn();
}

@Service
class AsynServiceImpl implements AsynService {
     
    @Override
    public void testAsyn() {
     
        this.syn();
    }

    @Async
    public void syn() {
     
        try {
     
            Thread.sleep(5000);
        } catch (InterruptedException e) {
     
            e.printStackTrace();
        }
    }
}

마지막 호출 출력 결 과 는:
http-nio-21002-exec-2

  :5001

최종 결론 은: this 호출 에 @ Async 주 해 를 추가 하 는 방법 으로 @ Async 가 유효 합 니 다!
주의: 주입 방식 으로 자신의 방법 을 호출 할 때 다음 과 같은 방식 을 사용 할 수 있 습 니 다.
AsynService bean = appContext.getBean(AsynService.class);
bean.syn()

좋은 웹페이지 즐겨찾기