Асинхронные и транзакционные методы

У меня есть веб-приложение, которое импортирует из файла в базу данных. Метод является асинхронным и транзакционным, читает и вставляет объекты. Проблема в том, что метод импорта занимает 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
    }
} 

Как я могу это исправить? Есть ли способ управлять асинхронными методами с хвостом? Для метода, который не запускается, пока не закончится другой.

0 ответов

Другие вопросы по тегам