hibernate初始化优化

本文介绍了一个Hibernate初学者常遇到的问题——如何正确地初始化SessionFactory以避免多线程环境下的并发问题。通过增加synchronized关键字,确保了SessionFactory只被初始化一次,防止了资源浪费和潜在的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还记得每个hibernate初学者都会被指导使用这样的函数来获取数据库资源


public static Session currentSession() throws HibernateException {

Session session = (Session) threadLocal.get();


if (session == null) {

if (sessionFactory == null) {

try {

cfg.configure(CONFIG_FILE_LOCATION);

sessionFactory = cfg.buildSessionFactory();

}

catch (Exception e) {

System.err.println("%%%% Error Creating SessionFactory %%%%");

e.printStackTrace();

}

}

session = sessionFactory.openSession();

threadLocal.set(session);

}


return session;

}


当你打开TOmcat的时候,一下有几十人来访问你的页面,那么这个函数很有可能就会初始化失败了。多年前实践中总结出来,修改一下,今天想到在这里写一下:


public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();


if (session == null) {
if (sessionFactory == null) {
[color=red]synchronized(SessionFactory.class){[/color]
if (sessionFactory == null) {
try {


cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}


return session;
}


实际上就是一个同步问题,避免多个人同时进入hibernate初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值