質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

1回答

5749閲覧

jdbcのコネクションプールの数を広げたい

k499778

総合スコア599

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

3クリップ

投稿2018/11/01 09:41

現在Java,SpringBoot,MySQL,TomcatでWebアプリケーションを作っています。

負荷テストを実施していて1分間で240スレッドのテストを実施したい際に以下のようなエラーになったので解決したいです。

log

1org.springframework.transaction.CannotCreateTransactionException: 2Could not open JDBC Connection for transaction; nested exception is 3java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, 4 request timed out after 30000ms.

Tomcatのバージョンは8.52です。

SpringBootの設定ファイル(application.yml)で以下のような設定を入れました。

yml

1spring: 2 datasource: 3 continue-on-error: false 4 driver-class-name: com.mysql.jdbc.Driver 5 initialization-mode: never 6# type: org.apache.tomcat.jdbc.pool.DataSource 7 tomcat: 8 max-active: 300

もともと動いていたところにmax-active: 300を入れました。
しかし、負荷テストの結果は同じで負荷に耐え切れず上記のようなエラーが出ました。

type: org.apache.tomcat.jdbc.pool.DataSource
が必要だと思ったのですが、コメントを外すとwebサーバー起動時にエラーが出てそれを解決できずにいます。

console

12018-11-01 14:17:30.689 ERROR 6916 --- [ost-startStop-1] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'sessionRepositoryFilterRegistration' defined in class path resource [org/springframework/boot/autoconfigure/session/SessionRepositoryFilterConfiguration.class]: Unsatisfied dependency expressed through method 'sessionRepositoryFilterRegistration' parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSessionRepositoryFilter' defined in class path resource [org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'springSessionRepositoryFilter' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sessionRepository' defined in class path resource [org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'sessionRepository' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSessionJdbcOperations' defined in class path resource [org/springframework/session/jdbc/config/annotation/web/http/JdbcHttpSessionConfiguration.class]: Unsatisfied dependency expressed through method 'springSessionJdbcOperations' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Generic.class]: Unsatisfied dependency expressed through method 'dataSource' parameter 0; nested exception is org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'spring.datasource-org.springframework.boot.autoconfigure.jdbc.DataSourceProperties': Could not bind properties to 'DataSourceProperties' : prefix=spring.datasource, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.datasource.type' to java.lang.Class<javax.sql.DataSource> 22018-11-01 14:17:30.704 INFO 6916 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]

負荷テストのエラーを解決する方法(おそらくコネクションプールの数を広げる)を教えていただけないでしょうか?
上記のエラーも踏まえてわかる方がいればお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rubytomato

2018/11/01 13:26

Java, Spring Bootのバージョンはなんでしょうか? 差支えなければ質問文に追記してください。
k499778

2018/11/01 18:23

Java1.8, SpringBoot 2.0.4.RELEASE です
guest

回答1

0

ログに java.sql.SQLTransientConnectionException: HikariPool-1 とあるので、HikariConnectionPoolを使っていると推測されますから、Hikari用の設定を修正しないと反映されないでしょう。

そこから推察するにSpringBoot2系の設定を利用されていると思われますので、例えば、

application.yml

yml

1spring: 2 datasource: 3 url: jdbc:mariadb://127.0.0.1:3306/retry_sample 4 username: root 5 password: password 6 hikari: 7 connection-timeout: 3000 8 connection-test-query: SELECT 1 9 maximum-pool-size: 50 10 minimum-idle: 5 11 validation-timeout: 1000

hikari用の設定に設定値を記載すると、接続数の変更が反映されると思います。(上記の内容を適宜変更してください。)

また、MySQL側の最大接続数も調整した上で接続プールの本数と待機時間を決めると良いでしょう。

投稿2018/11/01 17:55

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/11/01 18:29 編集

回答ありがとうございます。 Hikari用の設定も一応試したのですが、負荷テストを実行するとうまくいかなかった気がします。 ただどんなエラーかどんな状態だったか帰るギリギリに行ったので覚えていません。 設定が漏れてただけなのかもしれないので明日もう一度確認してみます。
A-pZ

2018/11/01 22:16

SpringBoot2系は、デフォルトでHikariConnnectionPoolが選択されます。
k499778

2018/11/02 01:24

了解しました。 ただやはりエラーが出てしまいます。長すぎて弾かれるので原因だけ書いてます。 Caused by: com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2830)
A-pZ

2018/11/02 02:49

タイムアウトしているようなので、Spring側のタイムアウト設定と、MySQL側のタイムアウト設定を両方確認するのが良いのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問