@rick1

Как запретить одновременный доступ к файлу/ячейке БД?

Приветствую!

Имеется метод контроллера:

@Controller
public class NoteController {

    @Autowired
    private NoteService noteService;

    @Autowired
    private UserService userService;

    private NoteFileWriter noteFileWriter = new NoteFileWriter();

    @RequestMapping(value = "admin/editnote/{id}", method = RequestMethod.POST)
    public String editNotePost(@PathVariable("id")Long id,
                           @ModelAttribute("note")String text){
        //получаем из БД заметку по ID
        Note note = noteService.getById(id);
        //меняем у заметки поле на новое
        note.setText(text);
        //обновляем заметку в БД. 
        noteService.saveNote(note);
        //обновляем заметку в файле
        noteFileWriter.writeNoteToFileWithFOS(note.getId().toString(), text);

        return "redirect:/admin/notelist";
    }
}


и страница view:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">

<head>
    <title>Add Notee</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script	src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>

<body>
<div class="container">
    <div class="row">
        <form autocomplete="off" action="#" th:action="@{/admin/editnote/{id}(id=${id})}"
              th:object="${note}" method="post" class="form-horizontal"
              role="form">
            <div style="margin-top: auto">
                <h2>Write your changes</h2>
            </div>
            <div>
                <textarea class="form-control" rows="12"
                          style="margin-top: 10px;" placeholder="Note"
                          name="note" th:inline="text" th:text="${note.text}">
                </textarea>
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary btn-block">Save changes</button>
            </div>
        </form>
    </div>
</div>
<br>
<div>
    <form th:action="@{/admin/home}" method="get">
        <button class="btn btn-md btn-warning btn-block" type="Submit">Home page</button>
    </form>
</div>
</body>
</html>


Каким образом лучше организовать одновременный доступ к файлу/ячейке БД средствами многопоточности?
Например, чтоб если один пользователь начал редактировать заметку. То второй мог только просмотреть последнюю версию, но не мог тоже преступить к редактированию?

Заранее спасибо!
  • Вопрос задан
  • 190 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы