满屏幕的线程Hibernate结合Servlet…

来源:互联网 发布:小额贷款骗局知乎 编辑:程序博客网 时间:2024/06/09 22:46
  发觉Hibernate每次重启都会开一堆线程来处理,所以,对于最开始通过xml文件启动hibernate的语句,一定要用单例模式。何为单例模式,就是用在类里面,用static:
public class StudentTest{
    private staticConfiguration cfg;
    private staticStandardServiceRegistryBuilder ssrb;
    private staticServiceRegistry service;
    private staticSessionFactory factory;
   private static int count=0;
   StudentTest(){
      if(StudentTest.cfg==null){
          StudentTest.cfg = newConfiguration().configure();
          StudentTest.ssrb = newStandardServiceRegistryBuilder()
            .applySettings(cfg.getProperties());
          StudentTest.service =ssrb.build();
          //SessionFactory factory =cfg.buildSessionFactory(service);
          StudentTest.factory =cfg.buildSessionFactory(newStandardServiceRegistryBuilder()
                .applySettings(cfg.getProperties()).build());
      
      }else{}
   }
  不然就等着GG(不用的话)……
  这里就不列完整的servlet工程了,单独列出servlet文件,我们可以看看具体怎么用hibernate的:
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;

// @authorflash胜龙
public class HelloWorld extendsHttpServlet {

   private static final long serialVersionUID =1L;
   private String message;
   @Override public void init() throwsServletException {
       message ="Hello World";
   }
   @Override public void doGet(HttpServletRequestrequest, HttpServletResponse response)
          throws ServletException,IOException {
       // 设置响应内容类型
      response.setContentType("text/html");
       // 实际的逻辑是在这里
      
      StudentTest st = newStudentTest();
       String r =st.get();
      
      PrintWriter out = response.getWriter();
      out.println("<h1>"+ message +"</h1>");
      out.println("<h4>"+ r +"</h4>");
   }
   @Override public void destroy() {
       // 什么也不做
   }
}
  没错,就是红字部分那么简单。那么简单有问题吗?当然有!如果不用单例模式,则会是这样的:
满屏幕的线程Hibernate结合Servlet后
  每刷新一次页面,立马多出4个线程(如果不用C3P0的线程池管理,则多出1个)。再多刷几次页面,线程就挤爆你的机器了。所以一定要用单例模式,cfg啥的生成一次就可以了。从这里也可以体现出,有个帮你管类的工厂是多么地重要。这就体现了IOC(控制反转)的重要性。

0 0