2017-01-18 48 views
0

HI私は、dbcp2データソースを使用してデータベースに接続するために、jdbcテンプレートでspringを使用しています。JDBC接続を取得できませんでした。ネストされた例外はjava.sql.SQLExceptionです。接続プールをjavaでプリロードするエラー

<bean id="dataSourcecool" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="RDS URL?zeroDateTimeBehavior=convertToNull" /> 
     <property name="username" value="xxxxx" /> 
     <property name="password" value="YYYYYYY" /> 
     <property name="defaultAutoCommit" value="true"/> 
     <property name="initialSize" value="150"/> 
     <property name="maxTotal" value="100"/> 
     <property name="maxIdle" value="0"/> 
     <property name="minIdle" value="0"/> 
     <property name="maxWaitMillis" value="10000"/> 
     <property name="validationQuery" value="SELECT NOW();"/> 
     <property name="timeBetweenEvictionRunsMillis" value="10000"/>  
     <property name="removeAbandonedOnMaintenance" value="true"/> 
     <property name="maxConnLifetimeMillis" value="10000"/> 
     <property name="minEvictableIdleTimeMillis" value="1000"/> 
    </bean> 

3つのデータベースとすべてのデータベースと同じ構成が5つのサーバーに存在します。 私のRDSは800の最大接続を持ち、以下のように私の例外を見つける。 私のメソッド:: org.springframework.jdbc.CannotGetJdbcConnectionExceptionの例外:JDBC接続を取得できませんでした。入れ子になった例外はjava.sql.SQLExceptionです。接続プールを事前ロードする際のエラー

このエラーの原因を教えてもらえますか?ここで取り入れる必要のあるデータベース構成を教えてください。前もって感謝します。

完全なスタックトレースがここ

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Error preloading the connection pool 
 
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 
 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:619) 
 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:684) 
 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:716) 
 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:726) 
 
at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:863) 
 
MY CLASS 
 
at 
 
My class 
 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 
at java.lang.reflect.Method.invoke(Method.java:606) 
 
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) 
 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) 
 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 
 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
 
at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:883) 
 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:653) 
 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) 
 
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:190) 
 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) 
 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
 
at java.lang.Thread.run(Thread.java:745) 
 
Caused by: java.sql.SQLException: Error preloading the connection pool 
 
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2085) 
 
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1533) 
 
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) 
 
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) 
 
... 45 more 
 
Caused by: java.sql.SQLException: Data source rejected establishment of connection, message from server: "Too many connections" 
 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1905) 
 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1831) 
 
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:2389) 
 
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:757) 
 
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1654) 
 
at com.mysql.jdbc.Connection.<init>(Connection.java:432) 
 
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:400) 
 
at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:39) 
 
at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:256) 
 
at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:868) 
 
at org.apache.commons.pool2.impl.GenericObjectPool.addObject(GenericObjectPool.java:961) 
 
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2081) 
 
... 48 more 
 
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Error preloading the connection pool 
 
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) 
 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:619) 
 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:684) 
 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:716) 
 
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:726) 
 
at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:863) 
 
My code 
 
    
 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
 
at java.lang.reflect.Method.invoke(Method.java:606) 
 
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) 
 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) 
 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 
 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
 
at..

+0

設定ファイルを投稿する – JavaLearner1

+0

こんにちは、私の設定ファイルを投稿して、RDSとELBで作業してくれた人がこれについて助けてくれますか? – Sharan

+0

さらに重要なのは、「起因」セクションを含むCOMPLETEスタックトレースを投稿することです。 –

答えて

0

であるスタックトレースは明らかに"Too many connections"を言います。 initialSizeの値を小さくして、5のようなものを試して問題が解決するかどうか確認してください。 maxTotalinitialSizeより大きい必要があります。

注:maxIdleは、負荷の高いシステム上で低すぎる設定されている場合、それはあなたが接続が閉じられ、ほとんどすぐに 新しい接続されて表示される可能性 であるあなたは、実際にDBCP documentationが言う、maxIdleminIdle設定に注意を払う必要があります開かれている。これはアクティブスレッド が接続を開くよりも速く接続を閉じることによって発生し、 はmaxIdle以上にアイドル接続の数を増加させます。高負荷のシステムの場合、最高の maxIdleの値は変わりますが、デフォルトの が良い出発点です。

接続プールのサイジングは簡単な作業ではありません。あなたのケースを調べる必要があります。詳細については、About Pool SizingProfessional connection pool sizing、およびrelated questionをご覧ください。

関連する問題