- 浏览: 182920 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yjc2020:
问个问题,spring batch 批量写数据时能否做日志输出 ...
spring Batch实现数据库大数据量读写 -
JimmyLincole:
yjc2020 写道JimmyLincole 写道1楼的问题, ...
spring Batch实现数据库大数据量读写 -
yjc2020:
JimmyLincole 写道1楼的问题,解决方法可以看一下这 ...
spring Batch实现数据库大数据量读写 -
JimmyLincole:
1楼的问题,解决方法可以看一下这个:The issue her ...
spring Batch实现数据库大数据量读写 -
yjc2020:
我也遇到了1楼的错误 Reader must be open ...
spring Batch实现数据库大数据量读写
WEB-INF\web.xml public class InitializingDataSourceFactoryBean extends AbstractFactoryBean { private Resource initScript; private void doExecuteScript(final Resource scriptResource) { public Object doInTransaction(TransactionStatus status) { }); import org.springframework.batch.core.StepContribution; public class MyHello implements InitializingBean, Tasklet { @Override @Override } public HelloJob() {
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/job-bean.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
WEB-INF\classes\job-bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<import resource="classpath:simple-job-launcher-context.xml"/>
<import resource="classpath:myHelloJob.xml"/>
<bean id="helloJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="quartz.example.HelloJob" />
<property name="jobDataAsMap">
<map>
<entry key="launcher" value-ref="jobLauncher"/>
<entry key="job" value-ref="myHelloJob"/>
</map>
</property>
</bean>
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="helloJob" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="50000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
</bean>
</beans>
WEB-INF\classes\simple-job-launcher-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<import resource="classpath:data-source-context.xml"/>
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="databaseType" value="MYSQL" />
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transctionManager" />
</bean>
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="simpleJob" class="org.springframework.batch.core.job.SimpleJob" abstract="true">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="taskletStep" class="org.springframework.batch.core.step.tasklet.TaskletStep" abstract="true">
<property name="jobRepository" ref="jobRepository" />
<property name="transactionManager" ref="transctionManager" />
</bean>
</beans>
WEB-INF\classes\data-source-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<import resource="classpath:data-source-context-init.xml"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:5141/batch"></property>
<property name="username" value="sa"></property>
<property name="password" value="sqldba"></property>
</bean>
<bean id="transctionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
lazy-init="true">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
WEB-INF\classes\data-source-context-init.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="initializingFactoryBean" class="quartz.example.InitializingDataSourceFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="initScript">
<value>classpath:schema-mysql.sql</value>
</property>
</bean>
</beans>
WEB-INF\classes\myHelloJob.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="myHelloJob" parent="simpleJob">
<property name="name" value="myHelloJob" />
<property name="steps">
<list>
<bean id="firstHello" parent="taskletStep">
<property name="tasklet">
<bean class="quartz.example.MyHello">
<property name="message" value="Hi~" />
</bean>
</property>
</bean>
</list>
</property>
</bean>
</beans>
package quartz.example;
private Resource destroyScript;
DataSource dataSource;
protected Object createInstance() throws Exception {
Assert.notNull(dataSource);
try {
doExecuteScript(destroyScript);
}
catch (Exception e) {
logger.debug("Could not execute destroy script [" + destroyScript + "]", e);
}
doExecuteScript(initScript);
return dataSource;
}
try {
if (scriptResource == null || !scriptResource.exists())
return;
TransactionTemplate transactionTemplate = new TransactionTemplate(new DataSourceTransactionManager(dataSource));
if (initScript != null) {
transactionTemplate.execute(new TransactionCallback() {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String[] scripts;
try {
scripts = StringUtils.delimitedListToStringArray(stripComments(IOUtils.readLines(scriptResource
.getInputStream())), ";");
}
catch (IOException e) {
throw new BeanInitializationException("Cannot load script from [" + initScript + "]", e);
}
for (int i = 0; i < scripts.length; i++) {
String script = scripts[i].trim();
if (StringUtils.hasText(script)) {
jdbcTemplate.execute(scripts[i]);
}
}
return null;
}
}
} catch (Exception e) {
logger.debug("기존에 스키마가 생성된 경우 오류가 발생 할 수 있으며, 오류 발생시 무시", e);
}
}
private String stripComments(List list) {
StringBuffer buffer = new StringBuffer();
for (Iterator iter = list.iterator(); iter.hasNext();) {
String line = (String) iter.next();
if (!line.startsWith("//") && !line.startsWith("--")) {
buffer.append(line + "\n");
}
}
return buffer.toString();
}
package quartz.example;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.InitializingBean;
private static Log _log = LogFactory.getLog(MyHello.class);
private String message = "";
public void setMessage(String message) {
this.message = message;
}
public void afterPropertiesSet() throws Exception {
_log.info("========= " + this.getClass().getSimpleName() + "=============" + message);
}
public RepeatStatus execute(StepContribution arg0, ChunkContext arg1) throws Exception {
_log.info(">>>>>>>>>>> " + this.getClass().getSimpleName() + "=====" + message );
return RepeatStatus.FINISHED;
}
package quartz.example;
import java.util.Date;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.scheduling.quartz.QuartzJobBean;
//public class HelloJob implements Job {
public class HelloJob extends QuartzJobBean {
private static Log _log = LogFactory.getLog(HelloJob.class);
private JobLauncher launcher;
private Job job;
private int count = 0;
public void setLauncher(JobLauncher launcher) {
this.launcher = launcher;
}
public void setJob(Job job) {
this.job = job;
}
}
protected void executeInternal(JobExecutionContext context) {
_log.info("<<<<<<<< " + " Hello World! - " + new Date() + " >>>>>>>>");
System.out.println("aaaa");
JobParametersBuilder jobParameterBulider = new JobParametersBuilder();
jobParameterBulider.addDate("date", new Date());
try {
JobExecution jobExecution = launcher.run(job, jobParameterBulider.toJobParameters());
for(Iterator<StepExecution> iterator =
jobExecution.getStepExecutions().iterator(); iterator.hasNext();) {
StepExecution stepExecution = iterator.next();
}
} catch (JobExecutionAlreadyRunningException e) {
e.printStackTrace();
} catch (JobRestartException e) {
e.printStackTrace();
} catch (JobInstanceAlreadyCompleteException e) {
e.printStackTrace();
}
}
}
发表评论
-
apache
2013-04-16 13:31 10311.Apache POI 处理office文档用到的 ... -
java获取上一天日期
2012-07-26 10:56 1568long currMi = System.cur ... -
System.currentTimeMillis() vs. new Date() vs. Calendar.getInstance().getTime()
2012-07-26 10:53 1791System.currentTimeMillis() i ... -
TODO XXX FIXME 自定义标签
2012-01-29 11:44 8691 TODO 表示需要实现,但目前还未实 ... -
Oracle中的Blob字段的处理
2012-01-12 09:19 2417Oracle中的Bloc字段的处理较其他字段来说,会有 ... -
csv格式读取通用类
2012-01-06 10:33 4881需要添加javacsv.jar 支持 import s ... -
HttpClient post请求 手机直冲案例
2011-08-16 17:54 2168HttpClentDeliver 发货通用类 pack ... -
plsql developer格式化sql为java代码
2011-07-22 10:55 1713plsql developer格式化sql后直接cop ... -
使用Quartz或Timer完成时序调度工作
2011-07-15 13:39 977使用Quartz或Timer完成时序调度工作 ... -
几种常用的Java数据源解决方案
2011-03-21 11:21 1055Java中的数据源就是javax.sql.DataSour ... -
java反射
2011-03-19 08:48 1144/** * @Title: 反射方式调用构造方法 ... -
150道java基础选择题
2011-02-24 12:49 2150150道java基础选择题
相关推荐
Quartz和Spring Batch是两种非常重要的Java开源框架,它们在企业级应用开发中扮演着重要角色。Quartz主要用于任务调度,而Spring Batch则专注于批量处理。在这个“quartz_springbatch_dynamic”项目中,我们将看到...
Quartz和SpringBatch是两种在Java开发中广泛使用的框架,Quartz用于任务调度,而SpringBatch则用于批量处理。在大型分布式系统中,结合这两者可以实现强大的定时任务集群功能,尤其是在需要对大量数据进行定时处理的...
在IT行业中,Spring Batch 和 Quartz 是两个非常重要的框架,它们分别用于批量处理任务和定时任务调度。本示例结合这两个框架,实现了一个功能,即定时从MySQL数据库中读取数据,进行处理后再存回MySQL。下面我们将...
通过集成Quartz、Spring Integration或其他调度工具,可以方便地安排批处理作业的执行时间。 6. **监控与审计** Spring Batch 提供了详细的执行元数据存储,可以追踪作业和步骤的状态、日志和性能指标,方便进行...
支持web接口的批处理框架 ...springmvc4.0.7 springbatch3.0.7 quartz2.2.3 mysql5.6 oracle11g junit4.11 log4j1.2.17 mybatis3.4.1 druid1.0.17 smg3(决策引擎) jetty8.1.5 fastjson1.2.7 springjdbc3.2.14
3. **定时任务**: 结合 Quartz 或者 Spring Scheduler 定时执行批处理任务。 4. **ETL 过程**: 在数据仓库项目中,使用 Spring Batch 进行数据抽取、转换和加载。 通过阅读《Spring.Batch批处理框架.pdf》和源码,...
mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...
《Spring Batch Admin 1.3.0.RELEASE:全面解析与应用指南》 Spring Batch Admin是基于Spring Batch的管理界面,它为批处理作业的监控、管理和调度提供了一个直观的Web界面。在本文中,我们将深入探讨Spring Batch ...
Spring Batch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。Spring Batch是Spring的一个子项目,使用Java语言并基于Spring框架为基础开发,使得已经使用 Spring 框架的开发者或者企业更...
Spring Batch和Quartz定时器的使用详解 Spring Batch是一个基于Spring的企业级批处理框架,它通过配合定时器Quartz来轻易实现大批量的数据读取或插入,并且全程自动化,无需人员管理。在使用Spring Batch之前,需要...
在项目开发过程中,涉及到的技术栈广泛且深入,本项目涵盖了WebService、SpringBatch以及Quartz等关键组件。这些技术在企业级应用开发中扮演着重要角色,下面将逐一详细介绍它们的核心概念、应用场景以及如何在实际...
SpringBatch主要关注批处理任务的事务、并发、监控和执行等,它本身不提供调度功能,如果需要实现任务的定期执行,可以与其他调度框架如Quartz结合使用。SpringBatch具有轻量级、稳健、并行处理的特点,并支持统一的...
Spring Batch Extensions是一个专门为Spring Batch框架提供扩展功能的项目,它旨在增强Spring Batch的基本能力,以满足更复杂的批处理需求。Spring Batch是Java平台上的一个开源批处理框架,它提供了全面的解决方案...
对于定时调度,可以结合Spring的`@Scheduled`注解或Quartz等外部调度器。 通过这个"Spring Batch学习demo项目源码",你可以学习如何设置这些组件,观察它们如何协同工作完成批量处理任务。深入研究源码,理解每个...
9. **作业调度(Job Scheduling)**:Spring Batch 可以与Spring Integration或Quartz等调度框架集成,实现定时或触发事件时自动运行作业。 10. **监控和管理(Monitoring and Management)**:Spring Batch 提供了...
- 使用 Quartz 或 Spring Integration 调度器来计划和触发 Job 执行。 10. **并行与分布式处理**: - 分布式处理通过 Partitioner 将大型 Job 划分为多个小 Step,在多台机器上并行执行。 - RemoteChunking 和 ...
5. **任务调度**:集成Quartz或Spring Scheduler实现定时任务执行。 四、Spring Batch配置 1. **XML配置**:传统方式,通过XML配置文件定义作业和步骤。 2. **Java配置**:使用@Configuration注解和@Bean方法进行...
springboot2.0中使用java配置来实现springbatch,摒弃之前的xml文件配置。
### ElasticJob与SpringBatch的结合使用 #### 一、引言 随着大数据和微服务架构的兴起,数据处理的需求越来越复杂。在很多场景下,我们需要处理海量数据,并且要保证数据处理的一致性和顺序性。为此,业界发展出了...
然而,Spring Batch 不是一个调度框架,它专注于任务的执行,而任务的调度通常需要结合其他如 Quartz 这样的调度工具来完成。 在整合 SpringBatch 到 SpringBoot 微服务系统中,我们需要进行以下步骤: 1. **添加 ...