场景如下:
spring中配置多个数据源如A,B,登录的时候,切换成A数据源读取用户,权限等数据,读完后立马切换到B数据源,进行普通操作(也就是说,用户数据都是放在A数据源中) 问题来了:当并发高的时候,会不会出现有人登录数据源切换到A了,然后其他用户在普通操作时,找不到B数据源中的表呢?
通俗的说就是出现抢数据源的问题!!!
请教大神的解答。
配置如下:
<!-- A数据源 -->
<bean id="bg_dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/A?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<!-- 初始化连接 -->
<property name="initialSize">
<value>5</value>
</property>
<!-- 最大连接数 -->
<property name="maxActive" value="1000" />
<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
<property name="maxWait" value="6000" />
<!-- 最大空闲连接 -->
<property name="maxIdle" value="30" />
<!-- 最小空闲连接 -->
<property name="minIdle" value="5" />
<!-- 连接不上时,将再次进行连接 -->
<property name="testWhileIdle" value="true" />
<property name="minEvictableIdleTimeMillis" value="20000" />
<property name="timeBetweenEvictionRunsMillis" value="20000" />
</bean>
<!-- B数据源 -->
<bean id="app_dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/B?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<!-- 初始化连接 -->
<property name="initialSize">
<value>5</value>
</property>
<!-- 最大连接数 -->
<property name="maxActive" value="1000" />
<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
<property name="maxWait" value="6000" />
<!-- 最大空闲连接 -->
<property name="maxIdle" value="30" />
<!-- 最小空闲连接 -->
<property name="minIdle" value="5" />
<!-- 连接不上时,将再次进行连接 -->
<property name="testWhileIdle" value="true" />
<property name="minEvictableIdleTimeMillis" value="20000" />
<property name="timeBetweenEvictionRunsMillis" value="20000" />
</bean>
<bean id="dataSource" class="com.dsp.core.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="app_dataSource" value-ref="app_dataSource" />
<entry key="bg_dataSource" value-ref="bg_dataSource" />
</map>
</property>
<property name="defaultTargetDataSource" ref="app_dataSource" />
</bean>
springmysql数据源
spring中配置多个数据源如A,B,登录的时候,切换成A数据源读取用户,权限等数据,读完后立马切换到B数据源,进行普通操作(也就是说,用户数据都是放在A数据源中) 问题来了:当并发高的时候,会不会出现有人登录数据源切换到A了,然后其他用户在普通操作时,找不到B数据源中的表呢?
通俗的说就是出现抢数据源的问题!!!
请教大神的解答。
配置如下:
<!-- A数据源 -->
<bean id="bg_dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/A?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<!-- 初始化连接 -->
<property name="initialSize">
<value>5</value>
</property>
<!-- 最大连接数 -->
<property name="maxActive" value="1000" />
<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
<property name="maxWait" value="6000" />
<!-- 最大空闲连接 -->
<property name="maxIdle" value="30" />
<!-- 最小空闲连接 -->
<property name="minIdle" value="5" />
<!-- 连接不上时,将再次进行连接 -->
<property name="testWhileIdle" value="true" />
<property name="minEvictableIdleTimeMillis" value="20000" />
<property name="timeBetweenEvictionRunsMillis" value="20000" />
</bean>
<!-- B数据源 -->
<bean id="app_dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/B?useUnicode=true&characterEncoding=utf-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
<!-- 初始化连接 -->
<property name="initialSize">
<value>5</value>
</property>
<!-- 最大连接数 -->
<property name="maxActive" value="1000" />
<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
<property name="maxWait" value="6000" />
<!-- 最大空闲连接 -->
<property name="maxIdle" value="30" />
<!-- 最小空闲连接 -->
<property name="minIdle" value="5" />
<!-- 连接不上时,将再次进行连接 -->
<property name="testWhileIdle" value="true" />
<property name="minEvictableIdleTimeMillis" value="20000" />
<property name="timeBetweenEvictionRunsMillis" value="20000" />
</bean>
<bean id="dataSource" class="com.dsp.core.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="app_dataSource" value-ref="app_dataSource" />
<entry key="bg_dataSource" value-ref="bg_dataSource" />
</map>
</property>
<property name="defaultTargetDataSource" ref="app_dataSource" />
</bean>
springmysql数据源
解决方案 »
- java poi操作Excel文件问题,【导出Excel文件】在线求解
- 初学,请教这个是JAVA EE吗??谢谢
- struts的<html:write>使用问题
- SOA 技术,能给我多上岗位? SOA方面的工作好找吗?
- Spring 2.5 新手问题
- 求救~java socket能写数据但是读取异常
- JVM参数调优问题
- ____________初学者,对java分类的一点问题,谢谢
- jb运行weblogic程序出的错误提示,大家看看怎样配置?
- 局域网内部的机器能作为jboss的服务器吗?
- [吐槽贴]上海某上市公司万XX信息——华东某项目组——某程序员代码
- Servlet里不写重定向和转发,只写alert,这个alert属于哪个页面的?
因为只有登录的时候才需要调用这个A数据源的数据。。把用户权限相关的数据独立了。那也应该单独配置一个数据源。
spring是单例的我只是想问问看,这样是否有我说的情况发生?会有抢数据源的问题否