У меня есть простой метод контроллера, который использует функцию propagation=Propagation.REQUIRES_NEW
весенней транзакции.Spring Propagation.REQUIRES_NEW nullfies autowired repositories
@Autowired
GzrelimRepository gzrelimRepository;
@Autowired
RelimService relimService;
@RequestMapping("/startScanning")
@Transactional(propagation=Propagation.REQUIRES_NEW)
private void scanResults(@NotNull String matchingSrc, @NotNull String rangeStart, @NotNull String rangeEnd, @NotNull Integer scanPid){
gzrelimRepository.pScanDupPidmWrap(matchingSrc, rangeStart, rangeEnd, scanPid);
}
Когда я вызываю этот метод, gzrelimRepository равно нулю, и я получаю ошибку пустого указателя исключения.
Если я удаляю require_new из распространения, все работает.
Причина использования require_new заключается в том, что для сканирования требуется много времени, и я хочу начать сканирование в своей собственной независимой новой транзакции и оставить другие вещи в обычной существующей транзакции.
Является ли мой подход правильным? Должен ли я попробовать другой подход?
Установка атрибута '@ Transactional' не изменит, как Spring создает и автоматически очищает ваши компоненты, поэтому, если' relimService' имеет значение null, проблема в другом месте. – Andreas
его не relimService имеет значение null. жалующихся на его объявление \t \t gzrelimRepository; ноль – Mayurb
Показать полный стек. – Andreas