jdbc批量插入10萬/100萬條數據

jdbc批量插入10萬/100萬條數據


package arthur.dy.lee.mybatisplusdemo.jdbc;

/**
 * @auther arthur.dy.lee
 * @since 2019/4/20 20:06
 */

import lombok.extern.slf4j.Slf4j;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

@Slf4j
public class InsertJobBatch extends Thread {

    public static void main(String[] args) throws Exception {

        for (int i = 1; i <= 10; i++) {
            new InsertJobBatch().start();
        }

    }

    @Override
    public void run() {
        String url = "jdbc:mysql://localhost:3306/xxl_job?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&useSSL=false";
        String name = "com.mysql.jdbc.Driver";
        String user = "root";
        String password = "root";
        Connection conn = null;
        try {
            Class.forName(name);//指定連接類型
            conn = DriverManager.getConnection(url, user, password);//獲取連接
            if (conn != null) {
                System.out.println("獲取連接成功");
                insert(conn);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void insert(Connection conn) {
        // 開始時間
        Long begin = System.currentTimeMillis();
        // sql前綴
        String prefix = "INSERT INTO xxl_job_info (job_group,job_cron,job_desc,add_time,update_time,author,alarm_email,"
                + "executor_route_strategy,executor_handler,executor_param,executor_block_strategy,executor_timeout,"
                + "executor_fail_retry_count,glue_type,glue_source,glue_remark,glue_updatetime,child_jobid,trigger_status,"
                + "trigger_last_time,trigger_next_time) VALUES ";
        try {
            // 保存sql後綴
            StringBuffer sqlVal = new StringBuffer();
            // 設置事務爲非自動提交
            conn.setAutoCommit(false);
            // 比起st,pst會更好些

            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            // 外層循環,總提交事務次數
            for (int i = 1; i <= 1; i++) {
                sqlVal = new StringBuffer();
                // 第j次提交步長
                for (int j = 1; j <= 10; j++) {
                    //int id = i*j;
                    //Sequence sequence = new Sequence();
                    //int id = (int) sequence.nextId();
                    int jobGroup = 3;
                    String jobCron = "*/20 * * * * ?";
                    String jobDesc = "批量測試-" + i;
                    Date addTime = new Date();
                    String nowTime = format.format(addTime);

                    String author = "lee";
                    String alarmEmail = "[email protected]";
                    String executorRouteStrategy = "CONSISTENT_HASH";  //FIRST, CONSISTENT_HASH
                    String executorHandler = "financeHandler";
                    String executor_param = "paramArthur";
                    String executorBlockStrategy = "DISCARD_LATER"; //DISCARD_LATER, COVER_EARLY , SERIAL_EXECUTION
                    int executorTimeout = 30;
                    String executorFailRetryCount = "3";
                    String glueType = "BEAN";
                    String glueSource = "";
                    String glueRemark = "GLUE代碼初始化";
                    String glueUpdatetime = nowTime;
                    String childJobid = "";
                    int triggerStatus = 1;
                    Long triggerLastTime = 0L;
                    Long triggerNextTime = 0L;
                    sqlVal.append("(");
                    //sqlVal.append(id).append(",");
                    sqlVal.append(jobGroup).append(",");
                    sqlVal.append("'" + jobCron + "',");
                    sqlVal.append("'" + jobDesc + "',");
                    sqlVal.append("'" + nowTime + "',");
                    sqlVal.append("'" + nowTime + "',");
                    sqlVal.append("'" + author + "',");
                    sqlVal.append("'" + alarmEmail + "',");
                    sqlVal.append("'" + executorRouteStrategy + "',");
                    sqlVal.append("'" + executorHandler + "',");
                    sqlVal.append("'" + executor_param + "',");
                    sqlVal.append("'" + executorBlockStrategy + "',");
                    sqlVal.append(executorTimeout).append(",");
                    sqlVal.append(executorFailRetryCount).append(",");
                    sqlVal.append("'" + glueType + "',");
                    sqlVal.append("'" + glueSource + "',");
                    sqlVal.append("'" + glueRemark + "',");
                    sqlVal.append("'" + glueUpdatetime + "',");
                    sqlVal.append("'" + childJobid + "',");
                    sqlVal.append(triggerStatus).append(",");
                    sqlVal.append(triggerLastTime).append(",");
                    sqlVal.append(triggerNextTime);
                    sqlVal.append("),");
                }
                // 構建完整SQL
                String sql = prefix + sqlVal.substring(0, sqlVal.length() - 1);
                // 添加執行SQL
                PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
                pst.addBatch(sql);
                // 執行操作
                pst.executeBatch();
                // 提交事務
                conn.commit();
                pst.close();
            }

            conn.close();
        } catch (SQLException e) {

            e.printStackTrace();
        }
        // 結束時間
        Long end = System.currentTimeMillis();
        // 耗時
        System.out.println("數據插入花費時間 : " + (end - begin) / 1000 + " s");
        System.out.println("插入完成");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章