Асинхронные и транзакционные методы
У меня есть веб-приложение, которое импортирует из файла в базу данных. Метод является асинхронным и транзакционным, читает и вставляет объекты. Проблема в том, что метод импорта занимает 5 или 6 минут. Если я дважды выбрасываю метод импорта без закрытия транзакции, второй метод получает повторные идентификаторы для вставок. Первый запуск просто отлично, но когда вы фиксируете вторичный сбой. Это мой код:
@Controller
public class IndexController {
@Autowired
private fooServicio fService;
@RequestMapping(value="/", method = RequestMethod.GET)
public final ModelAndView printIndex(MultipartFile file)
{
ModelAndView view = new ModelAndView("index");
foService.import(file);
view.addObject("message", "The file is loading");
return view;
}
}
@Service
@Transactional(readOnly = true)
public class FooServiceImpl implements FooService {
@Async
@Override
@Transactional(readOnly = false)
public final void import(final MultipartFile file) throws ServiceException {
//Read file and inserts
}
}
Как я могу это исправить? Есть ли способ управлять асинхронными методами с хвостом? Для метода, который не запускается, пока не закончится другой.