首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取java.lang.IllegalStateException:未找到线程绑定请求

获取java.lang.IllegalStateException:未找到线程绑定请求
EN

Stack Overflow用户
提问于 2018-09-06 00:08:30
回答 1查看 7.2K关注 0票数 1

当我尝试使用@Async注解时,我得到了下面的错误。

代码语言:javascript
复制
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

代码:

代码语言:javascript
复制
@Async
@Override
@Transactional
public void triggerEmailCommunication(List<String> eventCode, Integer authorizationId, Integer claimId,
        boolean callMethod) {
    Map<String, Object> emailBody = new HashMap<>();
    try {

        if (callMethod) {
            LOGGER.info("Communication async flow triggerEmailCommunication method starts.");
            emailBody = emailBodyObject(authorizationId, claimId, eventCode);
  }


private Map<String, Object> emailBodyObject(Integer authorizationId, Integer claimId, List<String> eventCode)
        throws CareBusinessServiceException {
    LOGGER.info("EmailBodyObject method starts.");
    Map<String, Object> emailBody = new HashMap<String, Object>();
    EmailClaimDetailsVO emailClaimDetails = new EmailClaimDetailsVO();
    ClaimAuthorizationVO claimAuthVO = new ClaimAuthorizationVO();
    Claim claim = new Claim();
    Authorization authorization = new Authorization();
    List<String> rejectReasonList = new ArrayList<>();
    Provider provider = new Provider();
    String providerName = null;
    String claimIntimationNbr = null;
    String authorizationNbr = null;
    SimpleDateFormat formatter = new SimpleDateFormat(AmhiConstants.DATE_FORMAT_DD_MM_YYYY);
    try {
        Integer claimIntimationId = null;
        if (null != claimId) {
            claim = enableBusinessService.retrieveClaimDetails(claimId);
     } catch(Exception e) {
     }
}

DAO层

代码语言:javascript
复制
@Override
public Claim retrieveClaimIdRecord(Integer claimId) {
    CriteriaBuilder builder = manager.getCriteriaBuilder();
    CriteriaQuery<Claim> criteriaQuery = builder.createQuery(Claim.class);
    Root<Claim> root = criteriaQuery.from(Claim.class);
    ArrayList<Predicate> conditions = new ArrayList<>();
    conditions.add(builder.equal(root.get(Claim_.claimId), claimId));
    criteriaQuery.select(root).where(conditions.toArray(new Predicate[] {}));
    javax.persistence.Query query = manager.createQuery(criteriaQuery);
    List<Claim> claims = query.getResultList();
    if(CollectionUtils.isNotEmpty(claims)){
        return claims.get(0);
    }
    return new Claim();
}

正在从DB中检索值。但是我得到了上面提到的例外。

EN

回答 1

Stack Overflow用户

发布于 2018-09-06 03:23:08

在我的例子中,当我在请求级创建了一个bean,并试图从另一个使用@Async注解创建的线程访问它时,就会发生这种情况。bean信息仅存储在原始线程的本地线程中。

在@Async通知之后,您是否在函数或后续函数中使用在基线程的线程本地创建和存储的内容?

@Async创建另一个线程,但不复制导致问题的原始线程的本地线程。

查看此内容- https://jira.spring.io/browse/SPR-6873

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52189445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档