java批处理,java批处理是什么意思

发布时间:2023-01-04

本文目录一览:

  1. 北大青鸟java培训:springbatch批处理框架的简介?
  2. [java编程 批处理](#java编程 批处理)
  3. JAVA如何实现数据库的批处理操作

北大青鸟java培训:springbatch批处理框架的简介?

批处理任务是大多数IT项目的一个重要组成部分,批处理在业务系统中负责处理海量的数据,无须人工干预就能够自动高效的进行复杂的数据分析和处理。 批处理会定期读入批量数据,经过相应的业务处理进行归档的业务操作,批处理的特征是自动执行,处理的数据量大,定时执行。 将整个批处理的流程按逻辑划分可以分为读数据,处理数据和写数据。 以下是整理的springbatch框架的简介知识,希望能帮助到大家。 springbatch对批处理本身的特性进行了抽象,将批处理作业抽象为job和jobstep,将批处理的处理过程分解为数据读,数据处理和数据写。 将异常处理机制分为跳过,重启和重试。 将作业的分区分为多线程,并行远程和分区。 springbatch不是一个调度框架,但需要调度框架来配合完成批处理任务,它只关注批处理相关的任务问题,但没有提供相应的调度功能,如果需要使用调度功能,需要使用调度框架,这里介绍一个比较常用的调度框架quartz,可以配合springbatch完成批处理的任务调度。 springbatch的架构分为三层:基础架构层,核心层和应用层。 应用层包含所有的批处理作业,核心层主要提供JobLauncher、Job和step,基础架构层主要提供通用的读(ItemReader)、写(ItemWriter)和服务处理(如:RetryTemplate重试模板;RepeatTemplate:重复模板),Springbatch的三层架构体系使得Springbatch框架可以在不同的层级进行扩展,避免不同层级之间的相互影响。 job的介绍批处理的作业是由一组step组成,同时job本身也是配置文件的顶级元素。 每个作业都有自己的名字,可以定义step的执行顺序,以及定义作业是否可以重启。 job执行的时候会生成一个jobinstance(作业实例)和一个jobexecution(作业执行器)。 jobinstance包含执行job期间产生的数据以及job执行的状态信息;1个job可以对应多个jobinstance,1个jobinstance可以对应多个jobexecution。 job的配置的主要属性有id(作业的唯一标识)、job-repository(定义作业仓库)、incrementer(作业参数递增器)、restartable(作业是否重启)、parent(指定该作业的父作业)、abstract(定义作业是否抽象)。 step的介绍step表示作业中一个完整的步骤,一个job可以由一个或者多个step组成,step主要负责批处理运行过程中的主要业务逻辑的实现。 河北电脑培训认为每次step执行的时候会生成一个或者多个jobexecution,每次任务执行失败的时候,等到下次重新执行该任务的时候就会为该任务的step重新生成一个stepexecution。

java编程 批处理

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Stack;
public class CheckFilebatch {
    private static final String LOG_FILE = "F:/CheckFilebatch.log"; //报错的信息写在这个文件里。
    private static final String FILE_HOME = "F:/niceStore /"; //要操作的物理目录
    public static void main(String[] args) {
        try {
            ArrayList<String> fileListInDB = new ArrayList<String>();
            FileWriter fw = new FileWriter(LOG_FILE);
            // TODO
            // 取得DB连接,执行sql“SELECT DISTINCT FILEPATH FROM ARR-FILE”,得到一个ResultSet
            // 从DB中取出文件信息,放入fileListInDB 中,
            ResultSet rs = null;
            while (rs.next()) {
                String path = rs.getString("File_Column");
                File f = new File(path);
                if (!f.exists()) {
                    // 不合法的报出错误信息。
                    System.out.println("file not exists: " + path);
                    fw.write("file not exists: " + path + "\n");
                } else {
                    // 合法的,转化为路径名的规范路径名字符串,加入到fileListInDB中
                    fileListInDB.add(f.getCanonicalPath());
                }
            }
            rs.close();
            //
            fw.write("\n\n\n\n");
            //下面开始遍历物理目录
            File home = new File(FILE_HOME);
            Stack<File> tmpStack = new Stack<File>();
            tmpStack.add(home);
            while (!tmpStack.isEmpty()) {
                File tmp = tmpStack.pop();
                File[] childs = tmp.listFiles();
                for (int i = 0; i < childs.length; i++) {
                    File child = childs[i];
                    if (child.isDirectory()) {
                        tmpStack.push(child);
                    } else {
                        if (fileListInDB.contains(child.getCanonicalPath())) {
                            fileListInDB.remove(child.getCanonicalPath());
                        } else {
                            // 删除文件。
                            child.delete();
                            // 这里的操作如果把它移动到另一个目录里,作为备份,更好些。
                            fw.write("delete file: " + child.getCanonicalPath());
                        }
                    }
                }
            }
            // 这个程序只考虑文件,不考虑目录
            fw.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

JAVA如何实现数据库的批处理操作

批量数据进入数据库使用addBatch()executeBatch()方法 PreparedStatement.addBatch(); ...... PreparedStatement.executeBatch();需要注意的是一次最多不要超过50条:1.因为插入的时候数据库已经锁定,然而若是一次性插入太多会造成其他业务的等待。2.会造成内存的溢出 举例:

PreparedStatement pst = (PreparedStatement) con.prepareStatement("insert into ***** values (?,'***')");
for (int i = 0; i < 10000; i++) {
    pst.setInt(1, i); // 把一个SQL命令加入命令列表
    pst.addBatch();
}
// 执行批量更新
pst.executeBatch();
// 语句执行完毕,提交本事务
con.commit();