web前端

位置:IT落伍者 >> web前端 >> 浏览文章

请慎用spring-ClassPathXmlApplicationContext手动加载sprin


发布日期:2022年01月10日
 
请慎用spring-ClassPathXmlApplicationContext手动加载sprin

在用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>

               

上一篇:使用jmx对weblogic进行动态的配置(源代码)

下一篇:MyEclipse配置WebService