2017-01-09 10 views
0

데이터베이스로 MySQL을 사용하는 하나의 Java Spring 응용 프로그램이 있습니다. MySQL 연결 제한은 약 12k입니다. 하지만 현재 응용 프로그램에는 기본 구성 만 포함되어 있으므로 클라이언트 연결이 최대 1500-1600 연결에 도달하는 동안 내 MySQL이 끊어집니다. 현재 MySQL에 BoneCP 연결 풀을 구성하는 방법을 알고있는 사람이 있습니까?BoneCP 연결 풀링 구성을 사용하는 Spring JDBC 템플릿

구성

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> 
<property name="driverClass" value="com.mysql.jdbc.Driver"/> 
<property name="jdbcUrl" value=“{URL}”/>  
<property name="username" value=“{USER}”/> 
<property name="password" value=“{PASSWORD}”/> 
<property name="idleConnectionTestPeriodInMinutes" value="60"/> 
<property name="idleMaxAgeInMinutes" value="240"/> 
<property name="maxConnectionsPerPartition" value="30"/> 
<property name="minConnectionsPerPartition" value="10"/> 
<property name="partitionCount" value="3"/> 
<property name="acquireIncrement" value="5"/> 
<property name="statementsCacheSize" value="100"/> 
<property name="releaseHelperThreads" value="3"/> 
<property name="connectionTestStatement" value="Select 1"/> 
</bean> 
+0

, 확실 코드가 연결 (풀에 연결을 반환하는) 닫는거야? –

+0

감사합니다. Spring JDBC 템플릿을 사용하고있어서 Spring JDBC 템플릿이 내부적으로 close connection을 처리한다고 생각합니다. 내 부하 분산 장치 아래에 10 서버가 있으므로 구성 값이 무엇인지 말해주십시오. –

답변

-1

이 업데이트 된 구성 감사를 참조하십시오.

public static void main(String[] args) { 

    BoneCP connectionPool = null; 
    Connection connection = null; 

    try { 
     // load the database driver (make sure this is in your classpath!) 
     Class.forName("org.hsqldb.jdbcDriver"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return; 
    } 

    try { 

     // setup the connection pool 
     BoneCPConfig config = new BoneCPConfig(); 
     config.setJdbcUrl("jdbc:hsqldb:mem:test"); 
     // url 
     // specific to 
     // your database 
     config.setUsername("sa"); 
     config.setPassword(""); 
     config.setMinConnectionsPerPartition(50); 
     config.setMaxConnectionsPerPartition(200); 
     config.setPartitionCount(50); 
     config.setLazyInit(false); 
     connectionPool = new BoneCP(config); // setup the connection pool 
     for (int i = 0; i < 200000; i++) { 
      connection = connectionPool.getConnection(); // fetch a //connection 
      System.out.println("Connection" + connection); 

      if (connection != null) { 
       System.out.println("Number of Connection successful " + i); 
       Statement stmt = connection.createStatement(); 
       ResultSet rs = stmt.executeQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS"); // do 
       // something 
       // with 
       // the 
       // connection. 
       while (rs.next()) { 
        System.out.println(rs.getString(1)); // should print out 
        // "1"' 
       } 

      } 
     } 
     connectionPool.shutdown(); // shutdown connection pool. 
    } catch (SQLException ex) { 
     ex.printStackTrace(); 
    } finally { 
     if (connection != null) { 
      try { 
       connection.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

} 현재 설정 최대 90 연결을 사용하는 응용 프로그램과 함께

+0

감사합니다. 하지만 최대 12000 mysql 연결 제한에 대한 idleConnectionTestPeriodInMinutes, idleMaxAgeInMinutes, maxConnectionsPerPartition, minConnectionsPerPartition, partitionCount, acquireIncrement, statementsCacheSize, releaseHelperThreads' 필드의 값을 알 수는 없습니다. –

+0

현재 구성을 공유 할 수 있습니까? –

+0

'<속성 명 = "idleConnectionTestPeriodInMinutes"값 = "60"/> <속성 명 = "idleMaxAgeInMinutes 「값 ="240 "/> <속성 명 ="maxConnectionsPerPartition "값 ="30 "/> <속성 이름 = "minConnectionsPerPartition"value = "10"/> ' –