Здравствуйте! Пишу веб-приложение на Spring. В том числе храню выгружаемые фалы в файловой системе. Делаю это примерно так:
int newId = fileDescDao.create(fileName, fileType....);
String path = BASE_DIR + newId + "/";
(new File(path)).mkdir;
FileOutputStream fos = new FileOutputStream(path + fileName);
IOUtil.copy(is, fos)
is.close();
fos.close();
//is - собственно выгружаемый файл.
Получается, что в БД уже существует запись, ссылающаяся на файл, а файл может быть еще не записан на диск, поэтому при попытке чтения файла может возникнуть ошибка. Более того это простой пример, есть места где запросов к БД выполняется больше. Будет ли достаточно транзакций (TransactionTemplate)?. Тогда вопрос - какая область действия их, т.е. если я напишу внутри транзакции fileDescDao.create(fileName, fileType....), то то что внутри create будет в транзакции или нет? Подскажите как это грамотно делается.
И еще слышал что существуют специальные либы для Java, позволяющие безопасно работать с вводом-выводом, т.к. вроде Java может вовремя не разлочить файлы, а в многопоточном приложении это может оказаться опасно.
Ответ на:
комментарий
от roy
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Опыт объединения Java, JavaScript, Python и Ruby с использованием GraalVM (2020)
- Форум Оцените потокобезопасность кода (2016)
- Форум Потокобезопасность в Ruby. (2012)
- Форум ios (2017)
- Форум Io (2011)
- Форум ios (2017)
- Форум IOS (2003)
- Форум Spring GlassFish (2019)
- Форум Spring+Quartz (2014)
- Форум JEE & Spring (2015)