Мне интересно, есть ли возможность спящего режима, откладывающего запись в БД.У меня есть Hibernate настроен для MySQL.Сценарии, которые я надеюсь поддержать, это 80%
чтение и 20%
запись.Так что я не хочу оптимизировать свои записи, я предпочитаю, чтобы клиент дождался записи в БД, а не вернулся немного раньше.Мои тесты в настоящее время имеют 100 клиентов параллельно, иногда процессор работает на максимуме.Мне нужен этот метод сброса для немедленной записи в БД и возврата только при записи данных.
На моей клиентской стороне я отправляю запрос на запись, а затем запрос на чтение, но запрос на чтение иногда возвращает ноль.Я подозреваю, что hibernate не записывает в БД сразу.
public final ThreadLocal session = new ThreadLocal();
public Session currentSession() {
Session s = (Session) session.get();
// Open a new Session, if this thread has none yet
if (s == null || !s.isOpen()) {
s = sessionFactory.openSession();
// Store it in the ThreadLocal variable
session.set(s);
}
return s;
}
public synchronized void flush(Object dataStore) throws DidNotSaveRequestSomeRandomError {
Transaction txD;
Session session;
session = currentSession();
txD = session.beginTransaction();
session.save(dataStore);
try {
txD.commit();
} catch (ConstraintViolationException e) {
e.printStackTrace();
throw new DidNotSaveRequestSomeRandomError(dataStore, feedbackManager);
} catch (TransactionException e) {
log.debug("txD state isActive" + txD.isActive() + " txD is participating" + txD.isParticipating());
log.debug(e);
} finally {
// session.flush();
txD = null;
session.close();
}
// mySession.clear();
}