Java Hibernate 4.2 SessionFactory的同步方法
我正在使用Hibernate 4.2.21,在几篇文章中,我看到一些人在方法中使用Synchronized来创建Hibernate的会话工厂,我的问题是什么是最佳实践,有没有?从我的角度来看,我认为如果我们像静态一样定义变量,那么Synchronized就没有意义了Java Hibernate 4.2 SessionFactory的同步方法,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我正在使用Hibernate 4.2.21,在几篇文章中,我看到一些人在方法中使用Synchronized来创建Hibernate的会话工厂,我的问题是什么是最佳实践,有没有?从我的角度来看,我认为如果我们像静态一样定义变量,那么Synchronized就没有意义了 public class HibernateSessionFactory { private static SessionFactory sessionFactory = buildSessionFactory();
public class HibernateSessionFactory {
private static SessionFactory sessionFactory = buildSessionFactory();
private static final Logger logger = LogManager.getLogger(HibernateSessionFactory.class);
private HibernateSessionFactory() {}
private static synchronized SessionFactory buildSessionFactory() {
Configuration configuration = new Configuration();
SessionFactory sf = null;
try {
configuration.configure("hibernate.cfg.xml");
configuration.setProperty("hibernate.dialect", System.getProperty("myApp.db.dialect"));
configuration.setProperty("hibernate.connection.driver_class", System.getProperty("myApp.db.driver"));
configuration.setProperty("hibernate.connection.datasource", System.getProperty("myApp.db.jndi"));
if (sessionFactory == null) {
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sf = configuration.buildSessionFactory(serviceRegistry);
}
return sf;
} catch (HibernateException ex) {
logger.error("Init SessionFactory creation failed: ", ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void shutdownSessionFactory() {
if(!sessionFactory.isClosed()){
sessionFactory.close();
logger.info("Session Factory shutdown");
}else{
logger.info("Session Factory is already closed");
}
}
}
如果(sessionFactory==null)@v.ladynev看起来很奇怪,我想了很久,是的。。你是对的,奇怪的是我会被删除,你对我的问题怎么看?当然,你是对的。类加载器自己执行这种同步。但是让我们等待一个更深刻的答案:)看起来很奇怪,如果(sessionFactory==null)@v.ladynev,我想了一下,是的。。你是对的,奇怪的是我会被删除,你对我的问题怎么看?当然,你是对的。类加载器自己执行这种同步。但让我们等待一个更深刻的答案:)