环境
jdk8,maven,oracle,
代码
Job-Repository.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:batch="http://www.springframework.org/schema/batch"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch-2.1.xsd" >
<batch:job-repository id="jobRepository" data-source="dataSource" isolation-level-for-create="READ_COMMITTED" transaction-manager="transactionManager" />
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@url:port:dbname"/>
<property name="username" value="user" />
<property name="password" value="pwd" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
batch.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:batch="http://www.springframework.org/schema/batch"
xmlns:batch-int="http://www.springframework.org/schema/batch-integration"
xsi:schemaLocation="
http://www.springframework.org/schema/batch-integration
http://www.springframework.org/schema/batch-integration/spring-batch-integration.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
<import resource="classpath:Job-Repository.xml"/>
<batch:job id="helloWorldJob">
<batch:step id="step_hello" next="step_world">
<batch:tasklet ref="hello" transaction-manager="transactionManager"></batch:tasklet>
</batch:step>
<batch:step id="step_world">
<batch:tasklet ref="world" transaction-manager="transactionManager"></batch:tasklet>
</batch:step>
</batch:job>
<bean id="hello" class="hello.HelloWorldTasklet">
<property name="message" value="Hello "></property>
</bean>
<bean id="world" class="hello.HelloWorldTasklet">
<property name="message" value=" World!"></property>
</bean>
</beans>
JobLaunch.java
package hello;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JobLaunch {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"batch.xml");
JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("helloWorldJob");
try {
/* 运行Job */
JobExecution result = launcher.run(job, new JobParameters());
/* 处理结束,控制台打印处理结果 */
System.out.println(result.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
HelloWorldTasklet.java
package hello;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JobLaunch {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"batch.xml");
JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
Job job = (Job) context.getBean("helloWorldJob");
try {
/* 运行Job */
JobExecution result = launcher.run(job, new JobParameters());
/* 处理结束,控制台打印处理结果 */
System.out.println(result.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
建表脚本
CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ;
CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ;
CREATE SEQUENCE BATCH_JOB_SEQ;
select * from BATCH_JOB_INSTANCE;
select * from BATCH_JOB_EXECUTION_PARAMS;
select * from BATCH_JOB_EXECUTION;
select * from BATCH_STEP_EXECUTION;
select * from BATCH_JOB_EXECUTION_CONTEXT;
select * from BATCH_STEP_EXECUTION_CONTEXT;
drop table BATCH_JOB_EXECUTION_CONTEXT;
drop table BATCH_STEP_EXECUTION_CONTEXT;
drop table BATCH_STEP_EXECUTION;
drop table BATCH_JOB_EXECUTION_PARAMS;
drop table BATCH_JOB_EXECUTION;
drop table BATCH_JOB_INSTANCE;
CREATE TABLE BATCH_JOB_INSTANCE (
JOB_INSTANCE_ID number PRIMARY KEY ,
VERSION number,
JOB_NAME VARCHAR(100) NOT NULL ,
JOB_KEY VARCHAR(2500)
);
cREATE TABLE BATCH_JOB_EXECUTION_PARAMS (
JOB_EXECUTION_ID number NOT NULL ,
TYPE_CD VARCHAR(6) NOT NULL ,
KEY_NAME VARCHAR(100) NOT NULL ,
STRING_VAL VARCHAR(250) ,
DATE_VAL date DEFAULT NULL ,
LONG_VAL number ,
DOUBLE_VAL DOUBLE PRECISION ,
IDENTIFYING CHAR(1) NOT NULL
);
CREATE TABLE BATCH_JOB_EXECUTION (
JOB_EXECUTION_ID number PRIMARY KEY ,
VERSION number,
JOB_INSTANCE_ID number NOT NULL,
CREATE_TIME TIMESTAMP NOT NULL,
START_TIME TIMESTAMP DEFAULT NULL,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
EXIT_CODE VARCHAR(20),
EXIT_MESSAGE VARCHAR(2500),
LAST_UPDATED TIMESTAMP,
JOB_CONFIGURATION_LOCATION VARCHAR(2500) NULL,
constraint JOB_INSTANCE_EXECUTION_FK foreign key (JOB_INSTANCE_ID)
references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID)
) ;
CREATE TABLE BATCH_STEP_EXECUTION (
STEP_EXECUTION_ID number PRIMARY KEY ,
VERSION number NOT NULL,
STEP_NAME VARCHAR(100) NOT NULL,
JOB_EXECUTION_ID number NOT NULL,
START_TIME TIMESTAMP NOT NULL ,
END_TIME TIMESTAMP DEFAULT NULL,
STATUS VARCHAR(10),
COMMIT_COUNT number ,
READ_COUNT number ,
FILTER_COUNT number ,
WRITE_COUNT number ,
READ_SKIP_COUNT number ,
WRITE_SKIP_COUNT number ,
PROCESS_SKIP_COUNT number ,
ROLLBACK_COUNT number ,
EXIT_CODE VARCHAR(20) ,
EXIT_MESSAGE VARCHAR(2500) ,
LAST_UPDATED TIMESTAMP,
constraint JOB_EXECUTION_STEP_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;
CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT (
JOB_EXECUTION_ID number PRIMARY KEY,
SHORT_CONTEXT VARCHAR(2500) NOT NULL,
SERIALIZED_CONTEXT CLOB,
constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
) ;
CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT (
STEP_EXECUTION_ID number PRIMARY KEY,
SHORT_CONTEXT VARCHAR(2500) NOT NULL,
SERIALIZED_CONTEXT CLOB,
constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID)
references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID)
) ;
分享到:
相关推荐
Spring 3提供了与Spring Batch的紧密集成,使得配置和使用变得更加简单。通过XML配置或者更现代的Java配置,开发者可以定义Job和Step的结构,以及它们之间的关系。Spring的依赖注入(DI)和AOP特性也能够应用于...
SpringBatch 是一个由 Spring 社区开发的轻量级、全面的批处理框架,它为构建强大、可靠的批处理应用程序提供了必要的工具和组件。Spring Batch 基于 Spring Framework,因此具备了 Spring 提供的生产力、面向 POJO ...
Sep 19 Spring Batch AWS集成Spring Batch与AWS SQS的集成,用于远程分块和分区。并 Jun 19响应式与非响应式Spring性能比较Spring MVC和Spring WebFlux之间的性能。 并 Apr 19使用Mongo群集的Spring Data Mongo使用...
本文将深入探讨如何利用Ibatis实现一对多关系、批处理、事务管理和与Spring及Struts2的集成。 首先,让我们来看一下“一对多”关系。在数据库设计中,一对多关系很常见,比如一个用户可以有多个订单。在Ibatis中,...
6. **Spring Batch**: 用于处理大量数据的批处理框架,支持事务管理、错误处理和重试机制,适用于批量导入导出、数据清洗等场景。 7. **Spring Integration**: 提供了多种协议和消息系统的连接器,便于实现不同系统...
配置Spring Batch与MyBatis的集成,你需要在Spring配置文件中声明Job、Step、Reader、Processor和Writer的相关bean,并配置数据源、事务管理器以及MyBatis的SqlSessionFactory。此外,还需要确保MyBatis的Mapper XML...
这个压缩包很可能是包含了一系列使用Spring框架开发的实际项目例子,帮助开发者理解和学习Spring的核心特性和扩展功能。 描述中的“spring-projects-examples”进一步确认了这一点,暗示这是一系列关于Spring的实践...
这份"Spring详细笔记和例子"应该包含了Spring框架的各个方面,包括但不限于核心容器、数据访问/集成、Web、AOP、工具类以及测试模块。 1. **核心容器**:Spring的核心组件主要包括Bean工厂(BeanFactory)和...
这个例子中的"CartApp3"很可能是一个基于Spring WebFlow实现的购物车应用程序。 在Spring WebFlow中,流程是应用程序的核心,它定义了用户与系统的交互路径。流程由一系列的状态(states)组成,每个状态可以包含一...
8. Spring生态中的其他工具和框架,如Spring Data、Spring Batch等。 通过这个培训,学员不仅能掌握Spring框架的实际应用,还能提升对Java企业级开发的整体理解,为成为一名合格的Spring开发者打下坚实基础。
在这个仓库中,你可能能看到关于如何创建Spring Boot项目、添加依赖、配置启动类以及使用Actuator进行健康检查和监控的例子。 Spring Security是Spring框架的安全模块,提供认证和授权功能。学习这个仓库,你将有...
- **第一个Spring应用**:通过一个简单的例子来介绍如何构建第一个基于Spring的应用程序。 #### 3. Spring中的IoC与DI - **IoC(Inversion of Control)**:控制反转是一种设计模式,用来减少计算机代码之间的耦合...
在SpringBoot项目中集成SpringBatch,只需要添加对应的依赖到`pom.xml`或`build.gradle`文件中,即可开启批处理功能。 SpringBatch的核心概念包括Job、Step、ItemReader、ItemProcessor和ItemWriter。Job是批处理...
标题 "springbyexample" 暗示我们关注的是与Spring框架相关的示例教程。...在实际项目中,还会涉及到Spring的其他模块,如Spring Batch、Spring Cloud等,这些都是Spring生态系统的一部分,提供了更多的功能扩展。
- **3.1.2 Spring Batch**:Spring Batch提供了批处理应用程序的框架。 #### 3.2 Spring 与其他技术的集成 - **3.2.1 Spring 与消息队列的集成**:例如与Apache Kafka的集成。 - **3.2.2 Spring 与微服务架构的结合...
在实际开发中,我们会逐渐接触到更多Spring的高级特性和用法,如Spring Security(安全)、Spring Cloud(微服务)、Spring Batch(批处理)等,这些都将进一步提升我们的开发效率和应用质量。通过不断学习和实践,...
8. **Spring Batch**:对于批量处理和大数据量操作,Spring Batch提供了一套完整的解决方案,包括读取、处理和写入大量数据的能力。 9. **实战示例**:压缩包中的例子可能包含了一些实际项目案例,比如用户注册登录...
10. **Spring Batch**:用于执行批量处理任务的模块,支持读取大量数据、处理数据、写入数据,并具有错误处理和重试机制。 以上是Spring框架的基础知识,通过提供的压缩包,你可以找到相关的代码示例,加深对这些...