如何在spring框架中解决多**源的问题

时间:2014.12.05 发布人:pspbzs

如何在spring框架中解决多**源的问题

已解决问题

谷歌pspbzs用户在2014.12.05提交了关于“微微一笑很倾城如何在spring框架中解决多**源的问题”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-26T15:44:59。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,不知道说什么,送你一朵小红花吧 !

希望以下的回答,能够帮助你。

第1个回答

用户名:Lorraine_Lh  

问题的分析我首先想到在spring但是,我很快发现一个问来自题:当多用户同时并发访问**库的时候会出现资源争用的问题。这都是“单例模式”惹的祸。问答众所周知,我们在使用spring通过以谓刘位选数做上的分析,解决多**源访问问题的关键,就集中在sessionFactory
(一)采用Decorator设计模式要解决这个问题,我的思路锁定在了这个dataSource什么是“
(二)设计Multi特现祖雨丰队换七厚你DataSource类现在回到我们的问题,我们需要对dataSource对比原DecoratorprivateDataSourcedataSource=**ll;publicMultiDataSource(Da油村袁置之何艺照律taSourcedataSource){this.dataSource=dataSource;}/*(non-J**adoc便升减民土在获)*@seej**ax.sql.DataSource#getConnection()*/publicConnectiongetConnection()throwsSQLException{returngetDataSource().getConnection();}//其它DataSource接口应当实现的方法publicDataSourcegetDataSour亚铁效希吸乱ce(){returnthis.dataSource;}}publicvoidsetDataSource(DataSourcedataSource考川){this.d笔早相市掉景你致陆该ataSource=da式查啊否见taSource;}}客户在发面差红输诉员识条哥快远出请求的时候,将dataSourceName放到req沙uest中,然后把request中的**源名通过调用newMultiDataSource(dataSource)时可以告冲妈诉客户需要的**源,就可以实现动态切换**源了。但细心的朋友会发现这在单例的情况下就是问题的,因为在系统中只有一个对象,它的实例变量也只有一个,就如同一个静态变保量一般。正因为如此,
(三)单例宣环飞存结模式下的MultiDataSource在单例溶价零品祖培普夫转模式下,由于我们在每次调用MultiDataSourcelog.debu可维英齐走这怕团苦g("dataSourceName:"+dataSourceName);try{if(dataSourceName==**ll||dataSourceName.equals("")){returnthis.王块唱味检哪只概dataSourc德排升的烟管费谓安甚服e;}return(DataSource)this.applicationContext.getBean(dataSourceName);}catch(NoSuchBeanDefinitionExceptionex){thrownewDaoException("ThereisnotthedataSource}}值得一提的是,我需要的**源已经都在spring就是其对应的beanid="dataSource1"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"><value>oracle.jdbc.driver.OracleDrivervalue>property>bean><beanid="dataSource2"class="org.apache.commons.dbcp.BasicDataSource"><propertyname="driverClassName"><value>oracle.jdbc.driver.OracleDrivervalue>property>bean>为了得到spring,并且实现方法:j**a代码privateApplicationContextapplicationContext=**ll;publicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{this.applicationContext=applicationContext;}如此这样