LoginSignup
0
1

More than 1 year has passed since last update.

JDBCドライババージョンアップでハマった話

Posted at

ハマった話をつらつらと、、、

担当システムのミドルウェア全般のバージョンが古く(※一部サポート外など、、、)
ミドルウェア周りのバージョンアップを行おうとした話

<現行システム>
・Java:1.8.0_222
・Mysql:5.7.12(Amazon Aurora)
・Spring:4.3.16(2020年12月末で正式にEOL)
・JDBCドライバ:mysql-connector-java 5.1.34 (MySQL Connector/J)

<背景>
年中無休で稼働する社内システムで時々以下のエラーが発生
・Communications link failure
・No operations allowed after connection closed.
調査したところ、まず色々ミドルウェアのバージョンが古い、、、
これまで目を背けてしまっていたような、、、、

ということで
まず、現在のJDBCドライバがMysql5.7に対応していないことが発覚したので
https://docs.oracle.com/cd/E17952_01/connector-j-5.1-relnotes-en/index.html
JDBCドライバのバージョンをあげることから開始する

1.アプリのpom.xmlのmysql-connector-javaのバージョンを変更

    	<!-- MySqlConnector -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.49</version>
		</dependency>

2.STG環境でテスト実施
3.本番リリース
  、、、がエラー発生。。。。
  ログを確認したところ、SELECT文の結果を取得できていない。。。
  マスタデータの取得なので必ず取得できないといけないのだが、、、
  ※エラーが発生した原因はマスタデータの取得ができる前提で後続処理がつくられていたから、、

SQLツールから同じSELECT文を発行し、SELECT結果が取得できることを確認。

  ますます、???????
  その日は切り戻しをして、後日原因調査とした。。。

4.原因調査
  本番環境のみでしか再現しない状態。
  うかつに本番DBを見れないので、、、
  ※STG環境で再現させるのが最優先※

    4-1.STG環境と本番環境のDBの差分を確認。
      Mysqlのバージョン等々、、、
      完全一致はしないが特に問題があるように見えない

    4-2.JDBCドライバのバージョンに問題あり?
      ※https://docs.oracle.com/cd/E17952_01/connector-j-5.1-relnotes-en/index.html
      骨が折れるし効率的でないので、、、別のアプローチ

    4-3.SELECT文に問題がないかを確認。
      まず、SELECT結果が Total:0 で取得できていないクエリを凝視!!!
      条件設定が正常に機能しなかった疑いがあるかも、、、
      判定不能な文字が含まれてしまっているとか、、、

      Mapper.xmlに書かれたSQL文をサクラエディタなどで確認。
      文字コードなど、、、

        結果的には、取得できないMapper.xmlと正常に取得できるMapper.xmlをWinMareにかけることで原因が分かった

      image.png

調査に2日ぐらいかかった、、、
JDBCドライバのバージョンを変えてSQLを投げてみたり、、
ORマッパーを調べまくったり、JDBCドライバのバージョン変遷を追っかけたり、、、

Mapper.xml内だけ見てると、改行が統一されてるのでおかしいと思わなかった、、、

<気になる点など>
・javaのjreが入っており、jstat(Javaアプリのメモリ計測)が使用できない。。。
 ※特別な要件がなければ基本的にJDKを入れる方がいいかも

<参照したものなど>
・meavenのセントラルリポジトリ(https://central.sonatype.dev/)
 ⇒pomに設定できるバージョンが存在するかなどを確認できる

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1