Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在Java中优化批量文件上载的插入调用_Spring_Jpa_Insert_Bulk - Fatal编程技术网

Spring 在Java中优化批量文件上载的插入调用

Spring 在Java中优化批量文件上载的插入调用,spring,jpa,insert,bulk,Spring,Jpa,Insert,Bulk,部门代码| empname |工作类型|部门|司法部 121 |约翰|永久|账户| 2012年12月12日 122 |保罗|永久|收入| 2011年11月12日 123 |马克|承包商|销售| 2010年5月4日 121 |迈克|永久|账户| 2009年9月8日 123 |纳什|承包商|销售| 12/15/2016 124 |能源部|承包商|营销| 2013年4月12日 问题描述: 这就是我试图使用MultiFileupload上传的CSV文件 阅读并创建一个列表 根据EMP_TRANS_表验证

部门代码| empname |工作类型|部门|司法部

  • 121 |约翰|永久|账户| 2012年12月12日

  • 122 |保罗|永久|收入| 2011年11月12日

  • 123 |马克|承包商|销售| 2010年5月4日

  • 121 |迈克|永久|账户| 2009年9月8日

  • 123 |纳什|承包商|销售| 12/15/2016

  • 124 |能源部|承包商|营销| 2013年4月12日

  • 问题描述:

  • 这就是我试图使用MultiFileupload上传的CSV文件

  • 阅读并创建一个列表

  • 根据EMP_TRANS_表验证此列表是否存在重复项 记录

  • 部门代码+工作类型+DOJ成为我的复合主键

  • 我使用SpringJPA谓词来检查重复的值和 然后插入值

  • 这是工作良好,直到750记录超过这是需要更多 保存数据的时间超过4分钟,返回响应的时间超过4分钟 到前端

  • 技术堆栈:

    1) 前端-角度JS

    2) SpringREST服务和SpringJPA(hibernate)

    3) Linux上的WAS 8.5 App server和SQL server 2008

    4) Java 1.7

    问题

  • 如何从java端优化DB验证和插入 因为我不能从DB端修改任何东西,也不能升级到Java 1.8也是
  • 我的要求是在数据库验证中支持5000条记录 插入应在2分钟内完成
  • 寻找最佳的解决方案和相关的代码,因为它必须通过应用程序应用于多个网页上传

  • 有一个hibernate属性,您可以将其定义为hibernate的
    会话工厂的属性之一:

    <property name="jdbc.batch_size">500</property>
    
    而不是

    insert into Table(id , name) values (1, 'na1');
    insert into Table(id , name) values (2, 'na2');
    insert into Table(id , name) values (3, 'na3');
    
    在事务性方法中,您将持久化大约500个实体。。然后刷新事务以获得最佳性能,直到保存所有数据:

    Transaction tx = session.beginTransaction();
    for ( int i=0; i<5000; i++ ) {
        EmpTrans empTrans = new EmpTrans();
    
        // populate empTrans attributes
    
        session.save(empTrans);
    
        if ( i % 500 == 0 ) { //500 , same as the JDBC batch size
            //flush a batch of inserts and release memory:
            session.flush();
            session.clear();
        }
    }
    tx.commit();
    
    Transaction tx=session.beginTransaction();
    
    对于(int i=0;i有一个hibernate属性,您可以将其定义为hibernate的
    会话工厂的属性之一:

    <property name="jdbc.batch_size">500</property>
    
    而不是

    insert into Table(id , name) values (1, 'na1');
    insert into Table(id , name) values (2, 'na2');
    insert into Table(id , name) values (3, 'na3');
    
    在事务性方法中,您将保留大约500个实体,然后刷新事务以获得最佳性能,直到保存所有数据:

    Transaction tx = session.beginTransaction();
    for ( int i=0; i<5000; i++ ) {
        EmpTrans empTrans = new EmpTrans();
    
        // populate empTrans attributes
    
        session.save(empTrans);
    
        if ( i % 500 == 0 ) { //500 , same as the JDBC batch size
            //flush a batch of inserts and release memory:
            session.flush();
            session.clear();
        }
    }
    tx.commit();
    
    Transaction tx=session.beginTransaction();
    对于(int i=0;i