MySQL JDBCではコネクションを繋いだり切ったりしてはいけない
現象
先日こんな例外に遭遇しました。
java.lang.IllegalStateException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket. This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required. For Windows-based platforms, see Microsoft Knowledge Base Article 196271 (Q196271).
発生環境
インサートをする際にその直前と直後にコネクションの接続と切断をするような
ソースを書いていました。。
インサートは数1000件レベルで発生します。。
めちゃくちゃ重くてパソコン止まりそうになりました…
原因
これの原因についてまとめている方がいらっしゃいましたので紹介します。。
どうやら原因は切ったり繋いだりを連続させて発生させてしまったこと。
プログラムの最初と最後に一回ずつ接続・切断を行うように書き換えたところ
問題解決と同時にプログラム自体の動作も劇的に改善されました!
pom.xmlエラー発生時の解決方法
ある日のこと、リポジトリーからwebアプリケーションをチェックアウトすると下記のようなエラーが発生しました。
Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4 from/to central (http://repo.maven.apache.org/maven2): repo.maven.apache.org
とりあえず、エイヤとこのままグーグル先生に投げてみると英語のサイトしか出てこなかったのでここに解決方法を日本語で書きとどめておきます。
spring3 でjsonをPOSTで受け取る
学生時代はフレームワークなんて使ったこと無かったんで初めてフレームワークを利用しててんてこマイ舞いドリームなんですよ、ホント。。。
ちゅーこって、、spring3でこの前引っかかったのでメモ
やりたいこととしては
実行環境
クライアント側
<form id = "searchform" action = "search" method = "POST"> <!--テキストボックスとかチェックボタンとか--> <button id = "searchbtn" type="submit" name = "searchbtn" onclick = "return check()">投げる</button> </form>
function check(){ //テキストボックスの入力チェックとか var jsonString = $('form').serializeArray(); var formData = JSON.stringify(jsonString); $.ajax({ type: 'POST', url: '/prototype/searchUser', data: JSON.stringify(jsonString), contentType: 'application/json', datatype: 'json', scriptCharset: 'utf-8' }).done(function(data){ //返ってきたときの処理 }).fail(function(data){ //返らなかったときの処理 }); } return false;
サーバ側
@ResponseBody @RequestMapping(value = "/search", method = RequestMethod.POST, produces="application/json; charset=UTF-8") public void searchFileInfoJson(@RequestBody String json) throws IOException, ServletException { //処理をあれこれ }
ポイント
- サーバ側 jsonでの受け取りは@RequestBody Stringで!
→自作のクラスを指定してそのパラメータに自動で受け取る方法もあるらしいけどうまくいかなかった
→まぁStringで飛んでくるからこれなら間違いなく受け取ることはできる。。
これが今の僕にできる精一杯でした。
ご査収ください。
ブログはじめました。。
はじめまして、、新人ポンコツSEの獣蔵です。
本ブログは下記の目的で開設致しました。
- 仕事や趣味でのプログラミングで詰まった所のメモ
- その他、気になった話題のメモ
本ブログに記載される技術的な文章はあくまで個人の備忘録レベルのものなので責任はとれません。
ご参考までにお願いします。
twitterやってます。↓
@kemonogura