SpringBootData SaveAll批量插入慢解决办法

本文介绍了一种解决在服务器环境下使用saveAll批量插入数据速度慢的方法,通过使用JdbcTemplate和设置rewriteBatchedStatements参数,实现了高效的数据批量插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做项目的时候,需要批量插入数据。然后使用saveAll()在本地跑速度还好,打包在服务器上跑的时候发现执行saveAll()时sql在控制台一条一条打印,速度超级慢。后面使用JdbcTemplate,解决了这个问题,在次记录。

    @Autowired
    private JdbcTemplate jdbcTemplate;

使用autowired注入jdbcTemplate。

  @Override
    public void batchInsertUsers(List<Student> list) {
        String sql = "insert into tbl_student(name, age, class) values(?, ?, ?)";
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                String name= list.get(i).getName();
                int age = list.get(i).getAge();
                String class= list.get(i).getClass();
                ps.setString(1, name);
                ps.setInteger(2, age);
                ps.setString(3, class);
            }

            public int getBatchSize() {
                return list.size();
            }
        });
    }

只需要把sql和实体改成自己的就行了。

最重要的一点,在application.properties的连接数据库Url加上rewriteBatchedStatements=true。只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL

spring.datasource.url=jdbc:mysql://localhost:3306/audit_declaration?characterEncoding=utf8&useSSL=true&serverTimezone=UTC&verifyServerCertificate=false&rewriteBatchedStatements=true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值