熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

請慎用spring-ClassPathXmlApplicationContext手動加載sprin

2022-06-13   來源: Java開源技術 

  在用spring做數據源配置的時候如果代碼中有用ClassPathXmlApplicationContext去加載spring配置文件那麼每次運行到此處代碼spring都會重新獲得一個數據庫連接
  如果浏覽量太大就會導致超出數據庫連接會話上寫的錯誤比如oracle會報出ORA錯誤臨時修改數據庫連接數治標不治本
  處理方式:
  將需要用ClassPathXmlApplicationContext手動加載spring文件的類放到spring配置文件中去實例化禁用ClassPathXmlApplicationContext直接調用
  將ClassPathXmlApplicationContext加載spring文件放到全局常量中(static標識)
  使用WebApplicationContextUtilsgetRequiredWebApplicationContext(servletContext)在服務器啟動時候直接加載webxml配置中的spring配置文件
  推薦第三種並做詳細介紹
  [java]
  public class SpringDBInit
  {
  /**
  * 系統應用spring環境
  */
  private static ApplicationContext ctx;
  /**
  * 單實例對象
  */
  private static SpringDBInit instance = null;
  private SpringDBInit()
  {
  }
  /**
  * 獲得單實例對象
  *
  * @return
  */
  public static SpringDBInit getInstance()
  {
  if (instance == null)
  {
  synchronized (SpringDBInitclass)
  {
  if (instance == null)
  {
  instance = new SpringDBInit()
  }
  }
  }
  return instance;
  }
  /**
  * 初始化Spring組件
  */
  public void init(Properties props)
  throws Exception
  {
  loadContextXML(props)
  }
  /**
  * 加載spring對象
  *
  * @param props
  */
  private void loadContextXML(Properties props)
  throws Exception
  {
  /*
  * LogFactorygetInstance()logRun(RunPriorityINFORMATIONAL
  * LogConstantssysLogConstantsINT_SPRING_START null )
  */
  try
  {
  ServletContext servletContext = (ServletContext) props
  get(APP_CONTEXT
  if (servletContext != null)
  ctx = WebApplicationContextUtils
  getRequiredWebApplicationContext(servletContext)
  }
  catch (Exception e)
  {
  eprintStackTrace()
  }
  if ((ctx == null) || (ctxgetBeanDefinitionNames()length == ))
  {
  }
  }
  /**

  * 得到一個spring的配置對象
  *
  * @param name
  * @return
  */
  public Object getBean(String name)
  {
  if (ctx == null)
  return null;
  else
  return ctxgetBean(name)
  }
  /**
  * 獲取單個信息
  *
  * @param key
  * @param object
  * @param request
  * @return
  */
  public static String getMessage(String key Object[] object Locale locale)
  {
  return ctxgetMessage(key object locale)
  }
  }
  [java]
  public class SpringDBUtil
  {
  /**
  * sjb管理類實例
  */
  private static SpringDBInit sdb = SpringDBInitgetInstance()
  /**
  * 得到一個系統配置 bean
  *
  * @param name bean的配置名稱
  * @return 如果系統沒有加載返回 null
  */
  public static Object getBean(String name)
  {
  return sdbgetBean(name)
  }
  }
  [java]
  public class SpringInitServlet
  extends HttpServlet
  {
  static final long serialVersionUID = L;
  /**
  * 啟動對象實例
  */
  private SpringDBInit sdbinit = SpringDBInitgetInstance()
  /**
  * servlet初始化
  */
  public void init(ServletConfig config)
  throws ServletException
  {
  superinit(config)
  Properties props = new Properties()
  propsput(APP_CONTEXT configgetServletContext())
  // 文件路徑
  String prefix = getServletContext()getRealPath(/
  // web應用路徑
  propsput(APP_PATH prefix)
  try
  {
  sdbinitinit(props)
  }
  catch (Exception e)
  {
  }
  }
  }
  webxml配置
  [html]
  <servlet>
  <servletname>springInitServlet</servletname>
  <servletclass>compandautilspringDBSpringInitServlet</servletclass>
  <loadonstartup></loadonstartup>
  </servlet>


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28694.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.