У меня есть проект dropwizard, размещенный на 2 серверах для обеспечения высокой доступности. Однако запись, созданная одним сервером, иногда не может быть найдена другим сервером. Обычно другой сервер пытается получить запись через 2-3 минуты. После повторной попытки, скажем, через 1 час, я могу получить запись. Прикрепление кода для сохранения и получения записи.
session.beginTransaction();
session.getTransaction().setTimeout(GiftcardConstants.DATABASE_TIMEOUT);
try {
session.save(giftcardBookingEntity);
if(session!=null && session.getTransaction() != null){
log.info("committing transaction");
session.getTransaction().commit();
} else {
log.error("error in database commit");
}
return true;
}
catch(Exception e){
log.error("Error in persisting giftcard entity", e);
return false;
}
finally{
if(session != null) {
log.info("Closing session");
session.close();
} else {
log.error(" error in closing database session");
}
}
для получения записи выполняется следующим образом.
try {
Query query = session.createQuery("FROM GiftcardBookingEntity GB WHERE GB.id is :id");
query.setLong("id",id);
return (GiftcardBookingEntity) query.uniqueResult();
} catch(Exception e){
log.error("Error in retrieving entry from database", e);
return null;
} finally{
if(session != null) {
log.info("Closing session");
session.close();
} else {
log.error(" error in closing database session");
}
}
GiftcardBookingEntity - это класс, который не связан ни с одним другим классом,Также я только что подключился к главному серверу MySQL.
Если сущность сохраняется на сервере 1, а вызов get поступает с сервера 2, один из 20 раз я не могу получить какую-либо сущность. Журналов ошибок нет, просто сущность равна нулю. Если я попытаюсь вручную через час, все работает нормально.
Я не уверен, что это проблема гибернации или проблема с сервером MySQL. Любая помощь приветствуется.