在作Business Intelligence Project时遇到的Spring的一个好玩问题

在作BI Project的时候遇到了一个很好玩的问题,整个设计很简单,NFS的flat file经java进行parsing,而后生成raw data flat file,用sqlldr batch upload到oracle db,business object web portal会按期生成分析数据,报表,show给user看。
 
期间使用了spring来进行oracle db数据的分析。下面是web.xml的一段。
 
<servlet>
 <servlet-name>lda</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/ldaContext.xml</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>/WEB-INF/classes/ldaContext.xml</param-value>
</context-param>
 
这里有一个很明显的bug,不知道看出来没有?
 
对了,ldaContext.xml装载了两次,可是有什么关系呢?有关系,你能够作一个试验,写一个context xml,用application context的getbean来获取一个bean id 1的bean instance,同时用di来注入一样的bean id 1给另外一个bean instance,你会发现,getbean get出来的实例和用di注进去的实例,竟然是两个彻底不一样的object,哈哈,好玩吧,不知道这个算不算Spring的bug,用的是同一个spring context,可是若是装载两次如出一辙的bean id时,没有提示任何错误,若是不作debug,你根本不知道你第一次拿到的实例和第二次拿到的实例竟然是彻底不一样的object。
 
这个bug致使咱们在使用多线程的时候,不断的新开新线程,而不是使用同一个线程实例,由于咱们expect get bean出来的实例,而后di给一个controller class,两个实例应该是同一个来的,可是实际上不是,呵呵。
相关文章
相关标签/搜索