package com.alibaba.druid.pvt.pool; import java.lang.management.ManagementFactory; import java.sql.Connection; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import junit.framework.TestCase; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.JdbcUtils; public class Large10KTest extends TestCase { private DruidDataSource[] dataSources; private ScheduledExecutorService scheduler; protected void setUp() throws Exception { long xmx = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getMax() / (1000 * 1000); // m final int dataSourceCount; if (xmx <= 256) { dataSourceCount = 1024 * 1; } else if (xmx <= 512) { dataSourceCount = 1024 * 2; } else if (xmx <= 1024) { dataSourceCount = 1024 * 4; } else if (xmx <= 2048) { dataSourceCount = 1024 * 8; } else { dataSourceCount = 1024 * 16; } dataSources = new DruidDataSource[dataSourceCount]; scheduler = Executors.newScheduledThreadPool(10); for (int i = 0; i < dataSources.length; ++i) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); dataSource.setCreateScheduler(scheduler); dataSource.setDestroyScheduler(scheduler); dataSource.setTestOnBorrow(false); dataSource.setTestWhileIdle(false); dataSources[i] = dataSource; } } protected void tearDown() throws Exception { for (int i = 0; i < dataSources.length; ++i) { JdbcUtils.close(dataSources[i]); } scheduler.shutdown(); } public void test_large() throws Exception { Connection[] connections = new Connection[dataSources.length * 8]; for (int i = 0; i < dataSources.length; ++i) { for (int j = 0; j < 8; ++j) { connections[i * 8 + j] = dataSources[i].getConnection(); } } for (int i = 0; i < dataSources.length; ++i) { for (int j = 0; j < 8; ++j) { connections[i * 8 + j].close(); } } } }