когда положить на ресурс TransactionSynchronizationManager - PullRequest
0 голосов
/ 09 марта 2020

Извините, что беспокою вас, у меня есть вопрос, и я не могу найти ответ. когда я отлаживаю mybatis под весенним загрузчиком, и я также использую аннотацию @transaction в моем методе, как показано ниже:

@Transactional
public void insert(UserEntity userEntity) {
    Integer result = userMapper.insert(userEntity);
}

я отмечаю, что ресурс TransactionSynchronizationManager имеет два ключевых значения. не знаю, когда вставлять в ресурс

, когда я отлаживаю, я останавливаю программу на MappMethor, вижу, что ресурс TransactionSynchronizationManager имеет только одно ключевое значение: подробности, как показано ниже:

public class MapperMethod {
     Object param = method.convertArgsToSqlCommandParam(args);
       // i stop here and see one key value in  the resource of TransactionSynchronizationManager
        result = rowCountResult(sqlSession.insert(command.getName(), param));
        break;
      }
}

enter image description here

затем я шаг за шагом в метод вставки sqlSessionTemplate и я вижу два значения ключа в ресурсе TransactionSynchronizationManager, как показано ниже, но я не вижу никакого кода для установки второго ключа значение в ресурсе TransactionSynchronizationManager.it похоже на magi c

public class SqlSessionTemplate implements SqlSession, DisposableBean {
 @Override
  public int insert(String statement, Object parameter) {
      // i stop here and see two key value in  the resource of TransactionSynchronizationManager
    return this.sqlSessionProxy.insert(statement, parameter);
  }
}

enter image description here

Я пытаюсь использоватьCollections.unmodifiableMap () для обмена картой ресурса threadlocal до того, как второе значение ключа не будет введено.

public class MapperMethod {
     Object param = method.convertArgsToSqlCommandParam(args);
       // i stop here and use Collections.unmodifiableMap() to modify the value of resource
        result = rowCountResult(sqlSession.insert(command.getName(), param));
        break;
      }
}

, затем я вхожу во вставку метод sqlSessiontTemplate, я вижу, что второе значение ключа пропало и нет ошибки. я просто не знаю, как это возможно

public class SqlSessionTemplate implements SqlSession, DisposableBean {
 @Override
  public int insert(String statement, Object parameter) {
      // i stop here and see one <datasource,connectionHolder> in  the resource of TransactionSynchronizationManager
      // i just use Collections.unmodifiableMap()
    return this.sqlSessionProxy.insert(statement, parameter);
  }
}

, поэтому я не знаю, когда поместить значение ключа в ресурс TransactionSynchronizationManager.

я просто хочу знать, как и когда поставить значение ключа, спасибо много!

я также поставил вопрос на github: введите описание ссылки здесь

...