<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>