首页 > 其他分享 >使用spring jdbcTemplate批量insert的性能问题

使用spring jdbcTemplate批量insert的性能问题

时间:2022-10-16 20:36:21浏览次数:65  
标签:insert cpm spring xxx jdbcTemplate batchSqlUpdate Types

最近在做一个数据搬迁的工具,从ES里把数据读出来,写到mysql,又因ES的数据有延迟,所以,还需要大量的update 动作。 使用了Spring jdbcTempalte. 因数据量比较大,导致mysql不堪重负。做了些优化,性能提升了不少。特此做个笔记。

原来的做法:

1. 使用jdbcTemplate.batchUpdate()方法。

2. sql: insert into <table> values(xxx, xxx, xxx) on duplicate key update xxx=?, xxx=?,xxx=?

更新后的做法:

1.  使用 org.springframework.jdbc.object.BatchSqlUpdate 替换jdgcTemplate.batchUpdate();

2. 用replace into 替换 on duplicate key update

 DataSource dataSource = this.jdbcTemplate.getDataSource();
        String sql = "insert into "+this.table+"(service,endpoint,endpoint_hash,value,total,time_bucket) values (?,?,?,?,?,?) ";
        BatchSqlUpdate batchSqlUpdate = new BatchSqlUpdate(dataSource,sql);
        batchSqlUpdate.setBatchSize(this.nacosConfig.getIntValue("batchSize",5000));
        batchSqlUpdate.setTypes(new int[]{Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.BIGINT,Types.BIGINT,Types.TIMESTAMP});
        for(EndpointCpm cpm : arrayList){
            batchSqlUpdate.update(cpm.getService(),cpm.getEndpoint()
                    ,this.getEndpointHash(cpm.getEndpoint()),cpm.getValue(),cpm.getTotal()
                    ,new Timestamp(format.parseDateTime(cpm.getTimeBucket()).getMillis()));
        }
        batchSqlUpdate.flush();

  

 

标签:insert,cpm,spring,xxx,jdbcTemplate,batchSqlUpdate,Types
From: https://www.cnblogs.com/lzmrex/p/16797005.html

相关文章

  • Spring注解@Profile的功能简介说明
    转自:  ​​http://www.java265.com/JavaFramework/Spring/202206/3613.html​​下文笔者讲述@Profile注解功能说明,如下所示@Profile:Profile的功能就是配置让应......
  • springBoot 快速开发 即相关内容
    在Boot中我们要是不想使用tomcat服务器想使用jetty的服务器的话修改一下pom.xml就行了  修改服务器端口(在配置文件中我们直接输入port就可以修改但是注!我......
  • Spring的依赖注入两种方式之二:构造器注入
     1.构造器注入引用类型第一步,在类的构造方法中调用引用类型,如下的构造方法:publicBookServiceImpl(BookDaobookDao1)JavaBeanpackagecom.oxygen.service.impl;......
  • Spring的依赖注入
    在Spring框架中,依赖注入描述了在容器中建立bean与bean之间依赖关系的过程.一个bean的属性有两种数据类型:引用类型简单类型(基本数据类型和String)向一个类传递数据的......
  • Spring boot JPA
    引包 配置   生产环境永远配置为:validate   @Entity对应库中的一张表   定义JPA接口DAO层   引入dozer Dozer对象之间的转换服务......
  • Spring Boot:自定义 Whitelabel 错误页面
    一、概述在本文中,我们将研究如何禁用和自定义SpringBoot应用程序的默认错误页面,因为正确的错误处理描述了专业性和质量工作。2.禁用白标错误页面首先,让我们看看如何通......
  • Spring的Bean的生命周期,初始化和销毁bean的方法
    本文以xml配置的方式来记录Spring的初始化和销毁bean的方法.JavaBean:packagecom.oxygen.dao.impl;importcom.oxygen.dao.BookDao;publicclassBookDaoImplimp......
  • 【10】Spring源码-分析篇-AOP源码分析
    Spring源码-AOP分析一、手写AOP回顾  本文我们开始讲解Spring中的AOP原理和源码,我们前面手写了AOP的实现,了解和自己实现AOP应该要具备的内容,我们先回顾下,这对我们理解Spri......
  • SpringMVC执行流程
    SpringMVC的组件DispatcherServlet:前端控制器,接受所有请求,调用其他组件。HandlerMapping:处理器映射器,根据配置找到方法的执行链。HandlerAdapter:处理器适配器,根据方法类型找......
  • SpringBoot自动装配的使用
    1.模板组件企业开发中,往往将常见工具类封装抽取,以简洁便利的方式供其他工程模块使用。而SpringBoot的自动装配机制可以方便的实现组件抽取。SpringBoot执行流程如下扫描依赖......