在spring(spring boot)中开启Mysql批处理b

2019-10-25  本文已影响0人  Mr__YongJ

最近在项目开发中,涉及到批量新增业务,使用到JPA,但是其saveAll性能着实达不到要求,甚至慢的变态(可能是配置没配置好的原因),最后使用了 JdbcTemplate的批处理,性能还是非常不错。

batchHasPlainStatements介绍,参考以下大佬的文章,我这就不赘述了。
https://www.jianshu.com/p/04d3d235cb9f

注:测试 批量新增 1000条数据
JPA saveAll 耗时30秒
JdbcTemplate的批处理(batchHasPlainStatements不设置,默认为false) 耗时30秒
JdbcTemplate的批处理(batchHasPlainStatements=true) 耗时200毫秒
也许差距不是那么大,跟各自的测试数据与机子本身也是有关的。

这里要说的是
关于 batchHasPlainStatements 的配置

spring:
  datasource:
    username: xxxx
    password: xxxx
    url: jdbc:mysql://xxxx:3306/xxx?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
    driver-class-name: com.mysql.cj.jdbc.Driver

网上大部分都是 在mysql url后面 跟上 &rewriteBatchedStatements=true,
由于种种原因,我的连接方式可能不是这种url配置方式了,但是必须配置 rewriteBatchedStatements 才能提高批处理性能。
所以可以使用以下方式去配置

spring:
    datasource:
    hikari:
      data-source-properties: 
        rewriteBatchedStatements: true

通过测试是ok的,因为在 我这个版本的spring boot选用的 连接池是 hikari 所以支持该配置。
如果使用的是 其他的 设置对应的 应该也是ok的,虽然我还没试。

上一篇下一篇

猜你喜欢

热点阅读