Spring HikariCPは大量挿入をする時、aut Comit=falseは挿入に失敗します.

1679 ワード

Spring HikariCPは大きなデータを挿入する時、aut Comit=falseは失敗を挿入します.現在のシーンは、一つの表にデータを初期化する必要があります.insert数千のデータは、200個ごとにデータベースに挿入します.最後にデータベースに挿入されていないことが分かりました.その中に誤りがあります.Sql Session.[org.apache.ibatis.session.defaults.DefaultSqlSession@5470d4c9」was not registed for synchronization because synchronization is not activeです.実は最初はsql limitの問題かもしれないと疑っていましたが、確定できませんでした.インターネットで多くの資料を探しました.springソース:https://www.programcreek.com/java-api-examples/index.php?source_dir=MybatisSpring2.5.X-master/src/main/java/org/mybatis/spring/Sql SessionUtils.java
https://stackoverflow.com/questions/12302598/spring-mybatis-tomcat-transactions-not-using-spring
https://github.com/brettwooldridge/HikariCP/issues/263
https://github.com/brettwooldridge/HikariCP/issues/1030
上記の資料を見て、より一層霧がかかっていることが分かりました.debugの時、無意識のうちにこのインターフェースを二回繰り返しました.第二インターフェースinsert動作を調整する前に、databaseで最初のインターフェースにinserの大量挿入データを見ました.そして、logの中にあります.
このように意外にもデータを見ることができて、insertが大量に挿入した後に、適当にselect操作を加えて、意外にも不思議なのはdatabaseの中のデータを見て、しかしこのような方式はよくなくて、当面の問題を解決することができますが、しかし普遍性を持たないで、つまりすべてのコードはすべて変えて、このように維持するコストは高すぎて、そこで再び原点に帰ります.sql limitかどうかの問題を考えて、HikariCPのconfig配置情報を調べます.https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby
https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration
この属性を見ました.
prepStemtCache Sql Limit This the maximum length of a prepared SQL statement that the driver will cache.The MySQL default is 256.In our experience、especially with ormframe the klike the herembergement.
この属性を元の100倍に増やしました.
prepStmtCacheSqlLimit=204800
プログラムを実行して、ロットinsertデータが成功しました.