在做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,两个实例应该是同一个来的,但是实际上不是,呵呵。

你可能感兴趣的:(职场,project,休闲,Business,Intelligence)