【问题标题】:How to create SessionFactory object如何创建 SessionFactory 对象
【发布时间】:2016-08-12 04:27:02
【问题描述】:

在我的项目中,我使用 Hibernate。为了与数据库交互,我在服务器端使用以下类:

public class DatabaseWorker {

    static SessionFactory sessionFactory = null;

    static {
        try{
            sessionFactory = new Configuration().configure().buildSessionFactory();
        }catch (Throwable ex) { 
           System.err.println("Failed to create sessionFactory object." + ex);
           throw new ExceptionInInitializerError(ex); 
        }
    }

    public static void addToDatabase(String something) {
        /...
    }
}

当我第一次调用 addToDatabase(String something) 方法时,它需要很长时间才能执行,因为需要创建 sessionFactory。有什么方法可以在第一次查询之前创建 sessionFactory?

【问题讨论】:

标签: java hibernate static


【解决方案1】:

在应用启动期间初始化会话工厂会增加其他操作的延迟。并在关闭您的应用程序时关闭它。不要在应用程序的第一次请求期间放置会话工厂初始化部分。

【讨论】:

    【解决方案2】:

    假设数据库查询不是您在应用程序中做的第一件事,您可以在后台的单独线程中构建会话工厂。

    不要将该代码初始化在静态块中。为了同步,根据您的代码的组织方式,您可以使用典型的单例实现,也可以使用简单的 future 对象,如下所示。

    static FutureTask<SessionFactory> sessionCreatedFutureTask = 
        new FutureTask<SessionFactory>(new Callable<SessionFactory>() {
            @Override
            public SessionFactory call() throws Exception {
                //initialize your SessionFactory
                return sessionFactory;
            }
    
    });
    
    
    
    public static void main(String[] args) {
        new Thread("sessioncreator") {
            public void run() {
                sessionCreatedFutureTask.run();
            }
        }.start(); //Or put this to threadpool if u have any relevant common pool
        ...
        ...
    }
    
    public static void addToDatabase(..) {
        try {
            //get session factory and use it.
            SessionFactory sessionFactory = sessionCreatedFutureTask.get();
        } catch (InterruptedException | ExecutionException e) {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2015-08-16
      • 2016-06-02
      • 2015-12-16
      • 2015-07-31
      • 2019-08-16
      • 2012-07-07
      相关资源
      最近更新 更多