java批處理,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 {

ArrayListString fileListInDB = new ArrayListString();

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);

StackFile tmpStack = new StackFile();

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();

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288938.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 03:01
下一篇 2024-12-24 03:01

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論