我在申请中遇到了一些性能问题。特别是在保存到数据库并从中检索时。 我的应用程序是一个独立的应用程序不是网络应用程序。我正在使用hibernate进行数据库通信。 此应用程序尚未投入生产。该应用程序将同时使用50人。
以下是我用于获取会话的代码。我怀疑下面是变慢的代码。
public class HibernateUtil {
public Session getSession() {
SessionFactory buildSessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = buildSessionFactory.openSession();
return session;
}
public Transaction getTransaction() {
return getSession().getTransaction();
}
}
我不知道如何为开启会话编写一个好的代码。 任何人都可以建议如何将这些代码重构为一个好的代码?
答案 0 :(得分:2)
此外,会话是否已关闭,意味着一旦线程完成了一个过程,我们是否会关闭会话。
除非遵守代码,否则您的问题没有单一的陈述答案,系统的性能取决于很多属性。
1。)GC
- 何时使用哪种算法。
2。)有多少session are getting opened
,是否有任何空闲的会话。应避免长时间运行。
3。)在代码中引入Caching mechanism
,Hibernate二级缓存,查询缓存
4.。)如何从数据库中检索big the objects
。
5.)many queries
如何被解雇为DB。
答案 1 :(得分:2)
我过去遇到过类似的问题,这个问题的根本原因是你每次尝试进行交易时都会创建工厂实例。
请使用单例模式创建SessionFactory对象,意味着只需创建一次Session工厂并从该工厂对象获取所有会话实例,我相信在此更改后您将不会遇到性能问题
更改下面的内容 -
static SessionFactory buildSessionFactory;
public static getSessionFactory() {
if(buildSessionFactory==null) {
buildSessionFactory = new
AnnotationConfiguration().configure().buildSessionFactory();
}
}
public Session getSession() {
getSessionFactory();
Session session = buildSessionFactory.openSession();
return session;
}
public Transaction getTransaction() {
return getSession().getTransaction();
}
它将解决您的问题