java批处理 异常处理_Java批处理教程

java批处理 异常处理

在当今世界,互联网已经改变了我们的生活方式,其主要原因之一是大部分日常琐事都使用互联网。 这导致大量数据可用于处理。

其中涉及大量数据的一些示例是处理工资单,银行对帐单,利息计算等。因此,想象一下,如果所有这些工作都必须手动完成,那么完成这些工作将花费很多时间。

在目前的年龄如何? 答案是批处理。

1.简介

批处理是对批量数据执行的,无需人工干预,并且可以长时间运行。 它可能是数据或计算密集型的。 批处理作业可以按预定义的时间表运行,也可以按需启动。 此外,由于批处理作业通常是长时间运行的作业,因此在批处理作业中发现经常检查和从特定故障中重新启动是常见的功能。

1.1 Java批处理的历史

Java平台的批处理是作为JSR 352规范(Java EE 7平台的一部分)引入的,它定义了批处理应用程序的编程模型以及用于运行和管理批处理作业的运行时。

1.2 Java Batch的体系结构

下图显示了批处理的基本组件。

Java批处理的体系结构

批处理应用程序的体系结构解决了批处理问题,例如作业,步骤,存储库,读取器处理器编写器模式,块,检查点,并行处理,流,重试,排序,分区等。

让我们了解架构的流程。

  • 作业存储库包含需要运行的作业。
  • JobLauncher从Job存储库中提取一个作业。
  • 每个工作都包含步骤。 这些步骤是ItemReaderItemProcessorItemWriter
  • Item Reader是读取数据的工具。
  • 项目处理是一种将基于业务逻辑处理数据的处理。
  • 条目编写器会将数据写回到定义的源。

1.3批处理组件。

现在,我们将尝试详细了解批处理组件。

  • 作业:作业包含整个批处理过程。 它包含一个或多个步骤。 使用作业指定语言(JSL)将作业放在一起,该语言指定必须执行步骤的顺序。 在JSR 352中,JSL在称为作业XML文件的XML文件中指定。 一项工作基本上就是一个存放步骤的容器。
  • 步骤:步骤是一个域对象,它包含作业的一个独立的顺序阶段。 步骤包含执行实际处理所需的所有必要逻辑和数据。 根据批处理规范,步骤的定义含糊不清,因为步骤的内容纯粹是特定于应用程序的,并且可以像开发人员所希望的那样复杂或简单。 有两种步骤: 面向块和面向任务
  • 作业操作员:它提供了一个界面来管理作业处理的各个方面,其中包括操作命令,例如开始,重新启动和停止,以及作业存储库命令,例如检索作业和步骤执行。
  • 作业存储库:它包含有关当前正在运行的作业的信息以及有关该作业的历史数据。 JobOperator提供用于访问此存储库的API。 JobRepository可以使用数据库或文件系统来实现。

下一节将帮助您了解批处理体系结构的一些常见特征。

1.3工作步骤

步骤是作业的独立阶段。 如上所述,作业中有两种类型的步骤。 我们将在下面尝试详细了解这两种类型。

1.3.1面向块的步骤

块状步骤将一次读取和处理一项,并将结果分组。 然后,当块达到预定义的大小时,将结果存储起来。 当数据集很大时,面向块的处理使存储结果的效率更高。 它包括三个部分。

  • 项目读取器从一个数据源中依次读取输入,该数据源可以是数据库,平面文件,日志文件等。
  • 处理器将根据定义的业务逻辑一一处理数据。
  • 编写器将数据分块写入。 块的大小是预定义的并且是可配置的

作为块步骤的一部分,有一些检查点可为框架提供信息以完成块。 如果在块处理期间发生错误,则可以基于最后一个检查点重新开始该过程。

1.3.2面向任务的步骤

除了处理数据源中的项目外,它还执行任务。 其中包括创建或删除目录,移动文件,创建或删除数据库表等。与块步骤相比,任务步骤通常不会长时间运行。

在正常情况下,在需要清理的面向块的步骤之后使用面向任务的步骤。 例如,我们获取日志文件作为应用程序的输出。 块步骤用于处理数据并从日志文件中获取有意义的信息。

然后,使用任务步骤来清理不再需要的较旧的日志文件。

1.3.3并行处理

批处理作业通常执行昂贵的计算操作并处理大量数据。 批处理应用程序可以在两种情况下受益于并行处理。

  • 本质上独立的步骤可以在不同的线程上运行。
  • 面向块的步骤(其中每个项目的处理独立于处理先前项目的结果)可以在多个线程上运行。

批处理有助于完成任务并更快地执行操作以处理海量数据。

2.工具与技术

让我们看看用于构建程序的技术和工具。

  • Eclipse Oxygen.2发布(4.7.2)
  • Java –版本9.0.4
  • Gradle– 4.3
  • Spring启动– 2.0.1-发布
  • HSQL数据库

3.项目结构

项目结构如下图所示。

Java Batch的项目结构

上面的项目结构使用Gradle。 也可以使用maven创建该项目,并且build.gralde将替换为pom.xml文件。 该项目的结构将稍微延迟使用Maven进行构建。

4.计划的目标

作为程序的一部分,我们将尝试使用spring boot创建一个简单的Java批处理应用程序。 该应用程序将执行以下任务。

  1. 读取:–从CSV文件读取员工数据。
  2. 处理数据:–将员工数据转换为全部大写。
  3. 写入:–将已处理的员工数据写回到数据库中。

4.1 Gradle构建

我们正在使用Gradle作为程序的一部分进行构建。 build.gradle文件将如下所示。

build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
    baseName = 'java-batch'
    version =  '1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-batch")
    compile("org.hsqldb:hsqldb")
    testCompile("junit:junit")
}

在上面的build.gradle文件中, apply plugin: 'java'告诉我们需要设置的插件。 对我们来说,它是Java插件。
repositories{}让我们知道应该从中提取依赖关系的存储库。 我们选择了mavenCentral拉依赖罐。 我们还可以使用jcenter提取相应的依赖罐。

dependencies {}标签用于提供应为项目提取的必要的jar文件详细信息。 apply plugin: 'org.springframework.boot'此插件用于指定spring-boot项目。 boot jar{}将指定将从构建生成的jar的属性。

4.2样本数据文件

为了提供读取阶段的数据,我们将使用包含员工数据的CSV文件。

该文件将如下所示。

样本CSV文件

John,Foster
Joe,Toy
Justin,Taylor
Jane,Clark
John,Steve

示例数据文件包含员工的名字和姓氏。 我们将使用相同的数据进行处理,然后将其插入数据库。

4.3 SQL脚本

我们正在使用HSQL数据库,它是基于内存的数据库。 该脚本将如下所示。

SQL脚本

DROP TABLE employee IF EXISTS;

CREATE TABLE employee  (
    person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
    first_name VARCHAR(20),
    last_name VARCHAR(20)
);

Spring Boot启动时会自动运行schema-@@platform@@.sql-all是所有平台的默认设置。 因此,表创建将在应用程序启动时自行进行,并且在应用程序启动并运行之前可用。

4.4模型类别

我们将创建一个Employee.java类作为模型类。 该类如下所示。

程序的模型类

package com.batch;

public class Employee {
	    private String lastName;
	    private String firstName;

	    public Employee() {
	    }

	    public Employee(String firstName, String lastName) {
	        this.firstName = firstName;
	        this.lastName = lastName;
	    }

	    public void setFirstName(String firstName) {
	        this.firstName = firstName;
	    }

	    public String getFirstName() {
	        return firstName;
	    }

	    public String getLastName() {
	        return lastName;
	    }

	    public void setLastName(String lastName) {
	        this.lastName = lastName;
	    }

	    @Override
	    public String toString() {
	        return "firstName: " + firstName + ", lastName: " + lastName;
	    }

	}

@Override用于覆盖toString()方法的默认实现。

4.5配置类

我们将创建一个BatchConfiguration.java类,它将作为批处理的配置类。 Java文件如下所示。

BatchConfiguration.java

package com.batch.config;

import javax.sql.DataSource;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.database.builder.JdbcBatchItemWriterBuilder;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;

import com.batch.Employee;
import com.batch.processor.EmployeeItemProcessor;

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    // tag::readerwriterprocessor[]
    @Bean
    public FlatFileItemReader reader() {
        return new FlatFileItemReaderBuilder()
            .name("EmployeeItemReader")
            .resource(new ClassPathResource("sample-data.csv"))
            .delimited()
            .names(new String[]{"firstName", "lastName"})
            .fieldSetMapper(new BeanWrapperFieldSetMapper() {{
                setTargetType(Employee.class);
            }})
            .build();
    }

    @Bean
    public EmployeeItemProcessor processor() {
        return new EmployeeItemProcessor();
    }

    @Bean
    public JdbcBatchItemWriter writer(DataSource dataSource) {
        return new JdbcBatchItemWriterBuilder()
            .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
            .sql("INSERT INTO employee (first_name, last_name) VALUES (:firstName, :lastName)")
            .dataSource(dataSource)
            .build();
    }
    // end::readerwriterprocessor[]

    // tag::jobstep[]
    @Bean
    public Job importUserJob(JobCompletionNotificationListener listener, Step step1) {
        return jobBuilderFactory.get("importUserJob")
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(step1)
            .end()
            .build();
    }

    @Bean
    public Step step1(JdbcBatchItemWriter writer) {
        return stepBuilderFactory.get("step1")
            .<Employee, Employee> chunk(10)
            .reader(reader())
            .processor(processor())
            .writer(writer)
            .build();
    }
    // end::jobstep[]
}

@EnableBatchProcessing批注用于启用批处理。
JobBuilderFactory是用于构建作业的工厂。
StepBuilderFactory用于创建步骤。 方法step1()具有属性chunk() 。 这是用于将输入分块为定义大小的属性。 对于我们来说,大小为10。

4.6项目处理器

项目处理器是一个接口,将负责处理数据。 我们将在EmployeeItemProcessor.java实现该接口。 Java类如下所示。

EmployeeItemProcessor.java

package com.batch.processor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemProcessor;

import com.batch.Employee;

public class EmployeeItemProcessor implements ItemProcessor<Employee, Employee> {

    private static final Logger log = LoggerFactory.getLogger(EmployeeItemProcessor.class);

    @Override
    public Employee process(Employee emp) throws Exception {
        final String firstName = emp.getFirstName().toUpperCase();
        final String lastName = emp.getLastName().toUpperCase();

        final Employee transformedEmployee = new Employee(firstName, lastName);

        log.info("Converting (" + emp + ") into (" + transformedEmployee + ")");

        return transformedEmployee;
    }

}

process()方法中,我们将获取数据,并将其转换为大写名称。

4.7 JobExecutionSupportListener类

JobExecutionListenerSupport是将在作业完成时通知的接口。 作为接口的一部分,我们有afterJob方法。 此方法用于过帐作业的完成。

JobCompletionNotificationListener.java

package com.batch.config;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.listener.JobExecutionListenerSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;

import com.batch.Employee;

@Component
public class JobCompletionNotificationListener extends JobExecutionListenerSupport {

	private static final Logger log = LoggerFactory.getLogger(JobCompletionNotificationListener.class);

	private final JdbcTemplate jdbcTemplate;

	@Autowired
	public JobCompletionNotificationListener(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	@Override
	public void afterJob(JobExecution jobExecution) {
		RowMapper rowMapper = (rs, rowNum) -> {

			Employee e = new Employee();

			e.setFirstName(rs.getString(1));
			e.setLastName(rs.getString(2));
			return e;
		};
		if(jobExecution.getStatus() == BatchStatus.COMPLETED) {
			log.info("!!! JOB FINISHED! Time to verify the results");

		List empList= jdbcTemplate.query("SELECT first_name, last_name FROM employee",rowMapper);
		log.info("Size of List "+empList.size());
		for (Employee emp: empList) {
			log.info("Found: "+emp.getFirstName()+" "+emp.getLastName());
			
		}
		}
	}
}

在这种方法中,我们是在作业完成后从数据库中获取数据的,并将结果打印在控制台上以验证对数据执行的处理。

4.8应用类别

我们将创建一个应用程序类,其中包含负责触发Java批处理程序的main方法。 该类如下所示。

应用程序

package com.batch;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

@SpringBootApplication是用于将程序指定为Spring Boot程序的注释。

5.输出

让我们将该应用程序作为Java应用程序执行。 我们将在控制台上获得以下输出。

JavaBatch程序的输出

批处理程序的工作流在输出中非常清楚。 Job以importUserJob ,然后第一步执行开始,将读取的数据转换为大写。

步骤的后处理,我们可以在控制台上看到大写的结果。

6.总结

在本教程中,我们学习了以下内容:

  1. Java批处理包含作业,该作业可以包含多个步骤。
  2. 每一步都是阅读,处理,写作的结合。
  3. 我们可以将数据分块为不同大小以进行处理。

7.下载Eclipse项目

这是带有SpringBoot的JavaBatch教程。

您可以在此处下载此示例的完整源代码: JavaBatch.zip

翻译自: https://www.javacodegeeks.com/2018/05/java-batch-tutorial.html

java批处理 异常处理

Spring Batch 批处理(2) - 搭建及运行 搭建spring batch 项目 1、注解@EnableBatchProcessing :使用此注解执行批处理 2、spring batch 的 依赖: <dependency> <groupId> org.springframework.boot</groupId> <artifactId>spring-boot-start-batch&lt... 阅读详情

相关推荐

相机图像质量研究(22)常见问题总结:CMOS期间对成像的影响--光学串扰

光学串扰是一个比较难以理解的光学现象,实际影响往往不大。一、光学串扰产生的原因通常是入射角度太大,光线在不同通道之间产生了混叠二、光学串扰产生的现象光学串扰容易导致迷宫纹。总结本节讲了光学串扰产生的原因,现象。

xiaoshixiu的专栏 1543

Spring batch 的高级特性--监听,异常处理,事务

Spring batch 的高级特性--监听,异常处理,事务 导 言 Spring batch是在Accenture(埃森哲)公司的批处理体系框架的基础上,再由SpringSource团队(原Interface21公司)大量参考和优化后所得的Java批处理产品。spring batch...

chihe9907的博客 4333

ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路

本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。

weixin_29292431的博客 456

Java使用多线程异步执行批量更新操作

此文转载自:https://blog.csdn.net/qq_43097201/article/details/112452391#commentBox 写在前面: 相信不少开发者在遇到项目对数据进行批量操作的时候,都会有不少的烦恼,尤其是针对数据量极大的情况下,效率问题就直接提上了菜板。因此,开多线程来执行批量任务是十重要的一种批量操作思路,其实这种思路实现起来也十简单,...

Python研究所 1819

Spring Batch 批处理(7) - 异常处理及容错机制

restart是针对job来使用,是重启job的一个操作。默认情况下,当任务出现异常时,SpringBatch会结束任务,当使用相同参数重启任务时,SpringBatch会去执行未执行的剩余任务。retry是对job的某一step而言,处理一条数据item的时候发现有异常,则重试一次该数据item的step的操作。skip是对job的某一个step而言,处理一条数据item的时候发现有异常,则跳过该数据item的step的操作。当第一次执行时,程序在33行抛出异常异常,curline值是30;

justlpf的专栏 2684

Springboot 整合 spring batch 实现批处理 ,小白文实例讲解

JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…5)ItemReader 数据读取器6)ItemProcessor 数据处理器。

m0_58269520的博客 1626

JDBC—事务与批处理

JDBC事务与批处理 一.事务 JDBC程序中当一个连接对象被创建时,默认情况下是自动提交事务:每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚。 JDBC程序中为了让多个 SQL 语句作为一个事务执行:(重点) 调用 Connection 对象的 setAutoCommit(false); 以取消自动提交,并开启事务 在所有的 SQL 语句都成功执行后,调用 co...

PassionZheng的博客 351

Java 批处理与事务处理

//掌握批处理的操作流程 //掌握JDBC中提供的事务处理操作 所谓的批处理指的是一次性向数据库之中发出多条操作命令,一起执行 如果要想操作批处理主要还是在Statement与PreparedStatement接口定义的。 Statement接口定义的方法: 增加批处理语句: public void addBatch​(String sql)throws SQLException 执行批处...

抛弃幻想,准备斗争 930

关于 Spring Batch 的详细解析及其同类框架的对比析,以及如何自己设计一个java批处理框架(类似spring batch)的步骤

关于 Spring Batch 的详细解析及其同类框架的对比

爱的叹息的专栏 2002

批处理任务设计java框架_spring batch批处理框架学习

内如主要来自以下链接:http://www.importnew.com/26177.htmlhttp://www.infoq.com/cn/articles/analysis-of-large-data-batch-framework-spring-batchspring batch批处理框架(书名)非常推荐!!!写得非常好!!!一.spring batch介绍什么是批处理:在信息系统中,联机和批...

weixin_35327824的博客 617

Spring Batch 批处理框架,真的太强悍了!!

点击关注公众号:互联网架构师,后台回复2T获取2TB学习资源!上一篇:Alibaba开源内网高并发编程手册.pdfspring batch简介spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作。这些业务运营包括:无需用户交互即可最有效地处理大量信息的自动化,复杂处理。这些操作通常包括基于时间的...

emprere的博客 1635

Spring Batch 批处理框架优化实践,效率嘎嘎高!

一、Spring Batch简介1 框架概述2 核心概念和组件二、批处理优化实践4.1 使用Spring Boot Actuator进行监控4.2 使用管理控制台来监控3.1 批处理启动前校验3.2 读写校验2.1 多进程处理2.2 多线程处理1.1 页处理数据1.2 使用读写缓存1.3 行级别写操作1 减少读写次数2 并发处理任务3 提高数据校验准确性4 监控批处理任务三、实践示例3.1 修改...

Java知音 1313

java批处理框架 pdf_《Spring Batch 批处理框架》PDF 下载

图书目录:第1篇 入门篇第1章 Spring Batch简介1.1 什么是批处理1.2 Spring Batch1.2.1 典型场景1.2.2 Spring Batch架构1.3 Spring Batch优势1.3.1 丰富的开箱即用组件1.3.2 面向Chunk的处理1.3.3 事务管理能力1.3.4 元数据管理1.3.5 易监控的批处理应用1.3.6 丰富的流程定义1.3.7 健壮的批处理应用...

weixin_40005330的博客 1308

Spring Batch处理指南:构建批处理服务

Spring Batch处理指南:构建批处理服务 gs-batch-processing Creating a Batch Service :: Learn how to create a basic batch-driven solution. ...

gitblog_00045的博客 567

深入解析Spring Batch:企业级批处理框架的技术之旅

Spring Batch是一个开源的、轻量级的批处理框架,它基于Spring框架构建,继承了Spring的诸多优点,如依赖注入、面向切面编程等。Spring Batch旨在简化批处理应用程序的开发,提供了一套丰富的功能来支持事务管理、作业调度、异常处理、日志记录等。Spring Batch是一个完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。它是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使得已经使用Spring框架的开发者或者企业更容易访问和利用企业服务。

码到三十五 2万+

SpringBoot系列】最详细demo-- Spring Batch批处理

先用一个图让你有一个大概印象,这个东西是什么JobRepository是用户注册Job的容器,就是存储数据的地方,可以看做是一个数据库的接口,在任务执行的时候需要通过它来记录任务状态等等信息。JobLauncher是任务启动器,通过它来启动任务,可以看做是程序的入口。Job代表着一个具体的任务。Step代表着一个具体的步骤,一个Job可以包含多个Step(想象把大象放进冰箱这个任务需要多少个步骤你就明白了)。Item就是输出->处理->输出,一个完整Step流程。...

wufaqidong1的博客 5116

Spring Batch 批处理让效率飙升 100 倍

批处理的江湖中,并非一枝独秀,还有许多其他优秀的框架。是大数据领域的先驱,它采用 “而治之” 的思想,将大规模数据处理任务解为 Map 和 Reduce 两个阶段。在 Map 阶段,数据被割成多个小块,每个小块由一个 Map 任务独立处理,生成一系列的键值对。例如,在处理海量文本数据统计单词出现次数的场景中,Map 任务会将每一行文本拆成单词,并为每个单词生成一个键值对,其中键是单词,值是 1。在 Reduce 阶段,具有相同键的键值对会被聚合在一起进行处理,得到最终的结果。

AlbenXie的博客 149

Spring Batch批处理任务开发

Spring Batch批处理任务开发是一种高效、便捷的数据处理方式,适用于各种复杂的数据处理需求。在实际应用中,读者可以根据自己的需求选择合适的工具和技术进行开发,以实现高效、准确的数据处理。Spring Batch是一个基于Spring框架的批处理任务开发框架,它提供了丰富的功能和便捷的开发体验。1. 灵活的配置选项:Spring Batch提供了丰富的配置选项,可以根据不同的需求进行灵活配置。2. 确定数据源和数据处理方式:根据项目需求和功能需求,确定所需的数据源和数据处理方式。

searchboy2025的博客 44

批处理框架 Spring Batch 这么强,你会用吗?

以下文章来源方志朋的博客,回复”666“获面试宝典spring batch简介spring batch是spring提供的一个数据处理框架。企业域中的许多应用程序需要批量处理才能在关键任务...

方志朋的博客 133
上一篇: java.awt.api_Java SE 11(18.9)中的API更新
下一篇: java中无限大_Java 9中的无限集
dnc8371
博客等级 码龄12年 421粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值