<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource">
   <property name="driverClassName" value="${db.jdbc.driverClassName}" />
   <property name="url" value="${db1.jdbc.url}" />
   <property name="username" value="${db1.jdbc.username}" />
   <property name="password" value="${db1.jdbc.password}" />
   <property name="maxActive" value="20" />
   <property name="maxIdle" value="3" />
   <property name="maxWait" value="15000" />
   <property name="timeBetweenEvictionRunsMillis" value="60000" />
   <property name="minEvictableIdleTimeMillis" value="180000" />
</bean>

 10个商品,10000个人来抢,请求来了放进redis队列后立即返回前端,由线程异步从队列里拿请求数据进行后续处理。最前面应该会有一些条件判断,这些条件判断应该简化,快速。就像抢小米手机,放进队列前主要就是判断下用户有没有预。那么就事先把预约过的用户名单放到缓存里。没预约,直接return,有预约就入队,满10个了,后面的全部return。页面可以采用ajax局部刷新,查队列有没有满,满了就按钮置灰。下载

<!-- MQ发消息线程池 -->
<bean id="taskMqExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
   <!-- 核心线程数  -->
<property name="corePoolSize" value="10" />
   <!-- 最大线程数 -->
<property name="maxPoolSize" value="200" />
   <!-- 队列最大长度 -->
<property name="queueCapacity" value="500" />
   <!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="5" />
   <!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
<property name="rejectedExecutionHandler">
      <bean class="java.util.concurrent.ThreadPoolExecutor$DiscardPolicy" />
   </property>
</bean>