#mysql #spring #database
#mysql #spring #База данных
Вопрос:
Я разрабатываю приложение типа pastebin. Кто-то может войти на веб-сайт и ввести некоторые тексты, и он получает URL. Любой пользователь с этим URL-адресом может получить доступ к тексту, который был введен ранее. Например, https://pastebin.com/eWCfCck1 . Открытие этого URL
Я создал страницу под названием История прошлых изменений, чтобы любой мог видеть все свои ранее сохраненные тексты. Я использую серверную часть Spring boot, которая вызывает запрос к базе данных в MYSQL и извлекает список ранее сохраненного текста для пользователя.
@GetMapping(value = "/pastEditHistory")
public String user(Principal principal, Model model, HttpSession httpSession){
//Fetch the email of this user
LinkedHashMap<Object,Object> map = (LinkedHashMap<Object, Object>)
((OAuth2Authentication) principal).getUserAuthentication().getDetails();
String emailId = (String) map.get("email");
//Find all the past stored texts for this user. Each PastedNote has the text and URL of the page
List<PastedNote> pasteNotes = pastebinRepository.findByAccountIdOrderByTimestampDesc(emailId);
//Storing in model to be viewed (rendered) on the frontend HTML
model.addAttribute("pasteNotes",pasteNotes);
// Http Session storing
httpSession.setAttribute("tier",accountInfo.getTier());
return "editHistory";
}
- Каждое обновление на этой странице будет вызовом базы данных (что может занять некоторое время). Возможно ли получить триггер из базы данных, если вставлена какая-либо новая информация, а затем выполнить только вызов DB?
- Предположим, что в базе данных нет новых обновлений, и я знаю, что для этой учетной записи эти тексты останутся прежними. Является ли хранение в httpsession хорошим вариантом и использование его в качестве временного хранилища хорошим вариантом? (Чтобы, если я перейду на какую-то другую страницу и вернусь к прошлой странице истории редактирования, я мог загружаться из HttpSession вместо вызова базы данных?
Ответ №1:
Я думаю, что то, что вы ищете, — это Hibernate second-level-cache
:
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>