异步的@Transactional事务AOP的性能问题

ActService类:

@Service
public class ActService {

  。。。
  
  @Autowired
  TransactionHelper transactionHelper;
  
  @Transactional(readOnly = true)
  public ActVo getActVo(String phoneNo) {
    。。。
    if(null == phoneNoSet || phoneNoSet.isEmpty()){
            ThreadUtil.FIXED_THREAD_POOL.execute(new Runnable() {
                @Override
                public void run() {
                    logger.debug("异步进入fillUserGroupCache");
                    transactionHelper.fillUserGroupCache(userGroupId);
                }
            });
    。。。
  }
  
  。。。
}

TransactionHelper类(解决Spring事务自调用问题)


@Component
public class TransactionHelper {
  。。。

  @Transactional
  public void fillUserGroupCache(String userGroupId) {
    logger.debug("填充用户组{}的缓存", userGroupId);
    if(...){
       synchronized(this){
          ...
       }
    }
    ...
  }
  
  ...
}


日志

    2018-03-01 13:37:40,653 [pool-2-thread-2] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:40,654 [pool-2-thread-3] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:40,654 [pool-2-thread-1] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:40,656 [pool-2-thread-5] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:40,656 [pool-2-thread-4] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:50,674 [pool-2-thread-2] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,674 [pool-2-thread-3] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,674 [pool-2-thread-1] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,674 [pool-2-thread-5] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,674 [pool-2-thread-4] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,677 [pool-2-thread-1] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:50,677 [pool-2-thread-4] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:50,677 [pool-2-thread-3] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:50,678 [pool-2-thread-2] DEBUG - 异步进入fillUserGroupCache [ActService$1:68]
    2018-03-01 13:37:50,680 [pool-2-thread-1] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,681 [pool-2-thread-3] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,681 [pool-2-thread-4] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]
    2018-03-01 13:37:50,681 [pool-2-thread-2] DEBUG - 填充用户组1165的缓存 [TransactionHelper:30]

发现第一次调用 transactionHelper.fillUserGroupCache(userGroupId), “异步进入fillUserGroupCache“ 和 “填充用户组1165的缓存” 之间差了10秒,为何性能这么差? 没多少请求啊

阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题